Вы можете использовать функцию with
. Он будет включать отношение модели. Итак, если у вас есть модель Product
, вы можете запросить отношение Product
, например Product
-> ProductPicture
.
Убедитесь, что у вас настроены отношения в ваших моделях. Это будет примерно так:
Product
модель:
public function pictures()
{
return $this->hasMany('App\ProductPicture', 'product_id', 'id');
}
ProductPicture
модель:
public function product()
{
return $this->belongsTo('App\Product', 'id', 'product_id');
}
Запрос с функцией with
будет выглядеть так:
$products = Product::with(['pictures' => function($q) {
$q->take(1);
])->get();
Он получит все продукты и прикрепит изображение (его отношение) к этому продукту.
Обновление: оказалось, что из продукта будет получено только 1 изображение, а изображения других товаров останутся пустыми. Таким образом, функция take
, вложенная в with
, будет работать должным образом только в том случае, если вы извлекаете одного родителя с помощью find
.
Что вы можете попробовать, так это определить новую функцию в модели Product
так, чтобы она привязывала к продукту только одно изображение:
public function singlePicture()
{
return $this->hasMany('App\ProductPicture', 'product_id', 'id')->limit(1);
}
Назовите это в запросе:
$products = Product::with(['singlePicture'])->get();
29.06.2020
->take(1)
на соответствующий номер продукта, который я получаю, и по какой-то причине это работает. Есть идеи, почему? 09.07.2020take()
из вашего первого ответа. 09.07.2020