Orm Laravel关系有很多疑问似乎是错误的
我第一次尝试建立雄辩的关系,为了这个问题我绞尽脑汁了好几个小时……下面是我的代码: 骑乘模型Orm Laravel关系有很多疑问似乎是错误的,orm,laravel,Orm,Laravel,我第一次尝试建立雄辩的关系,为了这个问题我绞尽脑汁了好几个小时……下面是我的代码: 骑乘模型 public function messages() { return $this->hasMany('Messages', 'ride_id'); } 消息模型 class Messages extends Eloquent { protected $guarded = ['id']; public function message(){ return $this
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集合始终为空:
从消息
中选择*其中消息
骑乘id
为空且骑乘id
='5'
问题在于消息
骑乘id
为空
为什么以及如何创建该条件?您正在创建一个新的Rides对象,并查询该“新”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对象时,它还没有附加任何消息,因为它是一个新的实例化。我对下面的代码段做了一些修改/简化 这没有经过测试,但假设hasMany()和belongsTo()从一开始就起作用,那么它应该可以工作 我建议测试
echo-Rides::find($user->id)->消息代码>和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>
@foreach($ride->messages as$message)
- {{$message->title}
@endforeach
在twitter上找到我:@ErikOnTheWeb在你的$ridesObj->messages()->where('ride_id','=',$ride[0]->id).
where()
语句是多余的。$ride->message
已将返回的消息隐式限制为与骑乘相关的消息。我建议您查看雄辩的文档,并尝试使用`php artisan tinker
BitActive。。。由于n+1问题实际上不适用于消息,您最好简化为以下内容:。。。控制器:$ride=Rides::find($user->id)代码>视图:foreach($ride->messages as$message)
和$ride->user
。。。我可能是错的,但我相信这将同样高效、查询明智,并为您节省一些代码/复杂性