2016-08-31 4 views
4

Я не могу договориться о работе belongsTo (или я использую неправильные отношения).Laravel Eloquent принадлежит Не работает

Моя структура базы данных (упрощенная):

страница:

 
id | title | main_image 
----------------------- 
1 | Test | 5 

СМИ:

 
id | filepath 
----------------------- 
5 | uploads/test.jpg 

Так что я хочу, чтобы иметь возможность делать $page->main_image и вернусь я пример модели Media, поэтому я мог бы использовать $page->main_image->filepath и т.д.

Page В модели у меня есть следующие:

public function main_image() 
    { 
     return $this->belongsTo('App\Modules\Media\Models\Media', 'id', 'main_image'); 
    } 

Но когда я $page->main_image я просто получить int 5. Я использую здесь неправильные отношения?

Спасибо!

+0

Что делает 'dd ($ page-> main_image)' output? – mazedlx

+0

Выходы такие же ** 5 ** – Giedrius

+1

Попробуйте 'return $ this-> attribTo ('App \ Modules \ Media \ Models \ Media', 'main_image');' Я думаю, что вы получили неправильные параметры для 'ownTo'method – mazedlx

ответ

2

При доступе к $page->main_image Eloquent попытается найти отношение main_image(), если нет атрибута с тем же именем. Но у вас уже есть имя столбца main_image. Поэтому вы должны либо переименовать атрибут (имя столбца), либо отношение. Я бы переименовал столбец в main_image_id.

Приоритет/порядок, что должен быть возвращен в:

  • свойство общественного объекта (public $main_page)
  • GetAccessor ($page->getMainPage())
  • столбец таблицы/атрибут ($page->attributes['main_page'])
  • Атрибут/столбец из таблицы ($this->attributes['main_page'])
  • Отложенное отношение ($this->relations['main_page'])
  • Разгруженное отношение ($this->main_page()->get())
+0

Имеет смысл, спасибо! Поэтому, если я хочу, чтобы он был доступен на '$ page-> main_image', я должен использовать метод accessor? – Giedrius

+1

Я предпочел бы переименовать имя столбца в 'main_image_id' –

Смежные вопросы