Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Orm Laravel关系有很多疑问似乎是错误的_Orm_Laravel - Fatal编程技术网

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
。。。我可能是错的,但我相信这将同样高效、查询明智,并为您节省一些代码/复杂性