我第一次尝试雄辩的关系而且我在这个问题上摸不着头几个小时......在这里我的代码:
骑模型
public function messages()
{
return $this->hasMany('Messages', 'ride_id');
}
消息模型
class Messages extends Eloquent {
protected $guarded = ['id'];
public function message(){
return $this->belongsTo('Rides');
}
}
骑控制器
public function show($user)
{
$ride = Rides::with('user')->where('id' ,'=',$user->id)->get();
$ridesObj = new Rides();
$messages = $ridesObj->messages()->where('ride_id', '=',$ride[0]->id)->get();
return View::make('site/rides/show')
->with('ride',$ride)
->with('messages',$messages);
}
通过查看查询,$ messages集合始终为空:
从messages
中选择* messages
。ride_id
为空,ride_id
='5'
问题是messages
。ride_id
为空
为什么以及如何创建条件?
答案 0 :(得分:0)
您正在创建一个新的Rides对象,并查询该消息" new" Rides对象,因为它是一个新对象而不存在。您需要查询原始$ ride对象上的消息。
// change method from "get" to "first" since you're only interested in the first ride
$ride = Rides::with('user')->where('id' ,'=',$user->id)->first();
$messages = $ride->messages;
我认为应该按照你的预期行事。主要概念是消息属于您搜索的骑行对象。当你创建一个新的Rides对象时,它还没有附加任何消息,因为它是一个新的实例化。
答案 1 :(得分:0)
我对下面的代码段进行了一些修改/简化。
这未经过测试,但应该假设您的hasMany()和belongsTo()正常运行。
我建议在echo Rides::find($user->id)->messages;
echo Rides::find($user->id)->user;
和php artisan tinker
public function show($user)
{
/**
* Utilize ORM in the view ($ride->messages and $ride->user). Eager loading may come in handy for many to many relationship... not necessarily needed for what you are doing here.
*/
$ride = Rides::find($user->id);
// DEPRECATED $ride = Rides::with('user', 'messages')->find($user->id);
return View::make('site/rides/show')
->with('ride',$ride);
}
在你的视图里面骑/显示,你应该可以做类似
的事情<ul>
@foreach($ride->messages as $message)
<li>{{$message->title}}</li>
@endforeach
</ul>
在Twitter上找到我:@ErikOnTheWeb