Laravel красноречив с данными о связях (быстрая загрузка)

#laravel #eloquent #eager-loading

#laravel #красноречивый #быстрая загрузка

Вопрос:

У меня есть две таблицы базы данных items и measurement_units — элемент имеет единицу измерения.

Теперь проблема в том, что я хочу выбрать определенный столбец из items и некоторого столбца из measurement_unit . Я хочу использовать быструю загрузку

например

 $items_with_mu = Item::with("measurement_unit")->select(["item_name", "item_stock"])->first();
  

При доступе к measurement_unit. Он возвращает null. Без функции выбора он возвращает данные (measurement_unit).

 $items_with_mu->measurement_unit;
  

кто-нибудь может мне помочь и извиниться за мой английский.

Комментарии:

1. Но мне нужно выбрать столбец. Я получил свой ответ. BDW спасибо за ответ.

Ответ №1:

Попробуйте это

 Item::with(['measurement_unit' => function($q) { 
           $q->select('id','unit_column');   //specified measurement_unit column
      }])
     ->select('id','measurement_unit_id','item_name')
     ->get();

  

Если ваша версия laravel > = 5.5, то вы можете написать в одной строке

 Item::with('measurement_unit:id,unit_column')
     ->select('id','measurement_unit_id','item_name')
     ->get()
  

Комментарии:

1. должна быть работа по выбору внешнего ключа measurement_unit_id . проверьте последний код

2. Glade поможет вам. вам следует проверить обновленный ответ, если ваша версия laravel > = 5.5

3. теперь я понял, чего мне не хватает. как можно объединить таблицу без внешнего ключа?

Ответ №2:

Вы должны выбрать основной столбец основной модели, как показано ниже.

  items_with_mu = Item::with("measurement_unit")->select(["item_name", "item_stock", "primary_key"])->first();
  

Комментарии:

1. Не могли бы вы, пожалуйста, вставить свой метод отношений?

2. Также структура базы данных.

3. primary_key должно быть foreing key . после добавления внешнего ключа это работает.

4. @ThataL Я говорю о первичном столбце модели элемента.

5. Хорошо, моя ошибка ( первичный ключ другой модели ). примите мою правку, я проголосую за ответ. Описание минимально, вот почему это меня смущает.