#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. Хорошо, моя ошибка ( первичный ключ другой модели ). примите мою правку, я проголосую за ответ. Описание минимально, вот почему это меня смущает.