Laravel关系hasmany查询似乎是错误的

时间:2014-01-23 15:48:46

标签: orm laravel

我第一次尝试雄辩的关系而且我在这个问题上摸不着头几个小时......在这里我的代码:

骑模型

 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中选择* messagesride_id为空,ride_id ='5' 问题是messagesride_id为空 为什么以及如何创建条件?

2 个答案:

答案 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>

Eloquent Docs

在Twitter上找到我:@ErikOnTheWeb