Модальный запрос Laravel

#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 () , а затем просто верните $products

3. 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()