where
метод в коллекции имеет три параметра: $key
, $value
и $strict
, последний по умолчанию используется true
, если не прошло при вызове метода. Когда $strict
истинно, сравнение выполняется через ===
, который не делает принуждение типа, то есть "1" === 1
является ложным.
Из ваших данных дампа, я могу видеть, что "main" => "1"
что означает, что строка и вы передаете целое 1
методы where
, в результате чего я описал выше как ложное условие и возвращает пустой результирующий набор. Вы можете исправить это, отключив строгое сравнение:
$alternativeProduct->pictures->where('main', 1, false);
// or the equivalent helper whereLoose
$alternativeProduct->pictures->whereLoose('main', 1);
Или передача строки в качестве значения:
$alternativeProduct->pictures->where('main', "1");
, как говорится, если это единственное место, где вы используете эту коллекцию в в этом запросе, я предлагаю отфильтровать результаты на уровне базы данных, а не после их получения:
$alternativeProduct->pictures()->where('main', 1)->get();
Доступ к отношениям как методу ->pictures()
, а не как свойство ->pictures
, вернет экземпляр Query Builder, который позволяет добавлять условия к запросу базы данных и получать только нужные элементы из базы данных, вместо того, чтобы получать их все и отфильтровывая их потом.
Пожалуйста, разместите отношение, которое у вас установлено для фотографий в вашей модели продукта. – Bogdan
Я добавил соотношение –