Laravel with ([]) выделяет только некоторые столбцы отношения

Laravel with ([]) выделяет только некоторые столбцы отношения

25.06.2020 12:25:53 Источник

Редактировать

Этот вопрос уникален, потому что он ставит уникальные проблемы, такие как:

  1. отношения внутри с компонентами. (утварь.продукт.управление запасами).
  2. Большое количество компонентов, это приводит к тому, что принятые ответы на связанный вопрос не применяются.

Предположим, у вас есть большой с (), как показано ниже:

$order = Order::with([
        'company',
        'complaints',
        'person',
        'items',
        'items.product',
        'items.product.stockManagement',
        'status', 
    ])->findOrFail($id);

Как я могу тогда выбрать со всеми их отношениями, но конкретные столбцы для некоторых из них?

$order = Order::with([
        'company',   // select only id,name, size
        'complaints',  // select only id, name , body
        'person',     
        'items',  
        'items.product',  // select only id, name , price
        'items.product.stockManagement',
        'status',  // select only id
        'items.product.media',
        'items.product.mainProduct',
        'items.product.mainProduct.media'
    ])->findOrFail($id);
У вопроса есть решение - Посмотреть?

Ответы - Laravel with ([]) выделяет только некоторые столбцы отношения / Laravel with([]) select only some columns of the relation

Является ответом!
Douwe de Haan

25.06.2020 12:31:03

Подобный этому:

$order = Order::with([
    'company:id,name,size',
    'complaints:id,name,body',
    'person',     
    'items',  
    'items.product:id,name,price',
    'items.product.stockManagement',
    'status:id',
    'items.product.media',
    'items.product.mainProduct',
    'items.product.mainProduct.media'
])->findOrFail($id);

Документация очень коротка о загрузке конкретных столбцов (вам даже придется немного прокрутить вниз до заголовка, который говорит "нетерпеливая загрузка конкретных столбцов").

Возможно, Вам не всегда понадобится каждый столбец из отношений, которые вы извлекаете. По этой причине Eloquent позволяет указать, какие столбцы отношения вы хотели бы получить:

$books = App\Book::with('author:id,name')->get();

Примечание:

При использовании этой функции вы всегда должны включать столбец id и все соответствующие столбцы внешнего ключа в список столбцов, которые вы хотите получить.

Dino Numić

25.06.2020 12:36:15

Вы также можете предоставить обратный вызов для некоторых более продвинутых запросов отношений.

Order::with([
    'company' => function ($q) {
         $q->select('id', 'name');
    }
])
Kamal Maisuriya

25.06.2020 03:13:46

$order = Order::with(
['company' => function($query) {
    $query->select('id','name','size')
 }),
'complaints' => function($query) {
    $query->select('id','name','body')
 }),
'person',    
'items',  
'items.product'  => function($query) {
    $query->select('id','name','price')
 }), 'items.product.stockManagement','status'=> function($query) {
    $query->select('id')
 }),'items.product.media', 'items.product.mainProduct', 'items.product.mainProduct.media'])->findOrFail($id);
Закрыть X