#php #laravel
Вопрос:
Я пытаюсь получить массив связанной модели для своих данных, и он возвращает значение null.
Код
public function collection()
{
return Product::with(['allBarcodes' => function ($query) {
$query->select('serial_number');
}])->get();
}
Результат
Также я попробовал сорвать лайк $query->pluck('serial_number');
, и результат был
Мои реальные данные
данные, которые я предполагаю получить, похожи на
[{
"id":1,
"product_id":1,
"serial_number":"5245412185", // I only need this to be return as array
"sold":1,
"created_at":"2020-05-24T04:21:56.000000Z",
"updated_at":"2020-05-24T04:21:56.000000Z"
}]
Есть идеи?
Комментарии:
1. как вы определили свои отношения в моделях ?
Ответ №1:
Когда вы делаете это $query->select('serial_number');
, вы выбираете только serial_number, а не столбец, который соединяет оба модала, т. е. product_id внутри таблицы штрих-кодов.
Сделай это. $query->select('product_id', 'serial_number');
. Однако это вернет 2 столбца. Если вам нужен только один, вам придется использовать преобразование коллекции.
$products = $products->map(function ($product) {
$product->allBarcodes->transform(function ($q) {
return $q->serial_number;
});
return $product;
});
Держите меня в курсе событий в комментариях ниже.
Комментарии:
1. извините, я немного запутался, теперь мой код
Product::with(['allBarcodes' => function ($query) {
внутриpublic function collection() {...}
, откуда это$products->map()
взялось?2. Сохраните результат таким
$products = Product::with...
образом и используйте map () , а затем просто верните $products3.
Call to undefined method IlluminateDatabaseEloquentBuilder::map()
4.
return Product::with(['allBarcodes'])->map(function ($product) { $product->allBarcodes->transform(function ($q) { return $q->serial_number; }); return $product; })->get();
5. Делать
->get()->map()