Laravel и отношения
Я создал несколько таблиц, например,
Новости (id, news_titles_id, create_time)
NewsTitles (идентификатор, имя)
Теперь для моих моделей:
class News extends Eloquent {
protected $table = 'News';
public function title() {
return $this->belongsTo('newsTitles', 'news_titles_id');
}
}
class NewsTitles extends Eloquent {
protected $table = 'NewsTitles';
}
Теперь, если я попытаюсь использовать
$news = News::all();
echo $news->title->name;
Я получаю неопределенную ошибку свойства в заголовке.
Что я здесь не так делаю? Я что-то упустил в красноречивом руководстве Laravels?
2 ответа
Решение
У вас есть таблицы, как указано ниже:
Таблица: NewsTitles: (идентификатор, имя)
Таблица: Новости: (id, news_titles_id, create_time)
Модели для этого:
class NewsTitles extends Eloquent {
protected $table = 'NewsTitles';
public function news()
{
return $this->hasOne('News', 'news_title_id');
}
}
class News extends Eloquent {
protected $table = 'News';
public function title()
{
return $this->belongsTo('NewsTitles', 'news_title_id');
}
}
Используйте как:
$news = News::with('title')->all(); // returns a collection (more than one)
echo $news->first()->title->name; // Get first News
echo $news->get(0)->title->name; // Get first News
echo $news->get(1)->title->name; // Get second News
Или вы можете зациклить:
foreach($news as $item) {
echo $item->title->name;
}
Я думаю, что это должно быть
return $this->hasOne('NewsTitle', 'news_title_id');
поскольку новостной объект "имеет один" заголовок новости.
И обратная связь, на NewsTitle
модель будет
public function news()
{
return $this->belongsTo('News', 'news_title_id');
}