Reputation: 123
I have created a few tables like so,
News (id, news_titles_id, create_time)
NewsTitles (id, name)
Now for my Models:
class News extends Eloquent {
protected $table = 'News';
public function title() {
return $this->belongsTo('newsTitles', 'news_titles_id');
}
}
class NewsTitles extends Eloquent {
protected $table = 'NewsTitles';
}
Now if I try and use
$news = News::all();
echo $news->title->name;
I get the undefined property error on title.
What am I doing wrong here? Did I miss something in Laravels eloquent guide?
Upvotes: 0
Views: 37
Reputation: 146191
You have tables as given below:
Table: NewsTitles: (id, name)
Table: News: (id, news_titles_id, create_time)
Models for that:
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');
}
}
Use like:
$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
Or you may loop:
foreach($news as $item) {
echo $item->title->name;
}
Upvotes: 1
Reputation: 91193
I think it needs to be
return $this->hasOne('NewsTitle', 'news_title_id');
since a News object "has one" news title.
And the inverse of the relationship, on the NewsTitle
model would be
public function news()
{
return $this->belongsTo('News', 'news_title_id');
}
Upvotes: 0