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');
}
Другие вопросы по тегам