При использовании с в качестве массива значений ключей параметром $el
для замыкания будет построитель запросов, который еще не выполнен.
Способ ограничения создателей запросов результатов заключается в использовании take()
. Поэтому ваш код должен выглядеть следующим образом.
->with(['images', function($el) {
$el->take(1);
}])
Редактировать Чтобы это решение работало, вам понадобится дополнительный пакет . Использование следующей черты должно заставить его работать и вместо этого использовать лимит. См. Следующий post .
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
->with(['images', function($el) {
$el->limit(1);
}])
В качестве альтернативы Laravel решение заключается в использовании свойств, подобных преобразованию, где вы можете создавать свои собственные пользовательские свойства в функции именование начинается с get и заканчивается атрибутом.
class Product {
protected $appends = ['first_image'];
public function getFirstImageAttribute() {
return $this->images->first();
}
}
Теперь, если вы используете стандартную сериализацию Laravel
, все продукты будут иметь поле first_image, и в вашем коде вы сможете получить к нему доступ таким образом.
$product->first_image;
Чтобы избежать снижения производительности, добавьте изображения, используя with('images')
.