Использование мутатора доступа с отношением ownTo

Используя Laravel 4, я настроил мутатор в моей модели User:

public function getFullnameAttribute($value)
{
return $this->first_name. ' ' .$this->last_name;
}

Но в моей модели «Автомобили» установлены отношения для идентификатора пользователя, связанного с этим автомобилем:

public function salesManager()
{
return $this->belongsTo('User', 'sales_manager')->select('first_name', 'last_name');
}

Я называю эти отношения на моем автомобильном столе:

$cars = Car::with('marqueBasic', 'modelBasic', 'salesManager')
->get();

Теперь, как я могу сделать, например,

$car->salesManager->fullname

В настоящее время не работает, что я предполагаю, потому что это в другой модели, которая называется?

Ошибка: «Попытка получить свойство необъекта»

Я звоню мутатору не в том месте? Я попытался поместить его в поля выбора отношений, но также искал имя поля полного имени и ошибок.

3

Решение

Вероятная причина заключается в том, что вы определяете список полей, которые нужно выбрать для отношения.

Чтобы понять почему, вам нужно сначала понять, как Eloquent загружается менеджер по продажам отношение, когда вы просите его получить все автомобили с их SalesManager. Eloquent в такой ситуации делает следующее:

  1. Загрузить все машины
  2. Получить значения менеджер по продажам колонны для всех загруженных автомобилей
  3. Загрузите всех пользователей, которые имеют идентификатор в пределах значений из пункта 2.
  4. Сопоставьте загруженные пользовательские модели с автомобилями, сопоставив идентификатор выбранной пользовательской модели и столбец sales_manager автомобиля.

Как видите, шаг 4 сделать невозможно. пользователя Я бы поле не указано в списке полей, которые нужно выбрать для менеджер по продажам Отношение так красноречиво, когда жадно загружается менеджер по продажам, не будет способа сопоставить извлеченных пользователей с автомобилями. Вам нужно добавить поле, на которое вы ссылаетесь, в своем менеджер по продажам отношение к списку:

public function salesManager()
{
return $this->belongsTo('User', 'sales_manager')->select('first_name', 'last_name', 'id');
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]