hasManyThrough在相同的型号上

时间:2016-12-14 16:56:07

标签: laravel eloquent laravel-5.3 laravel-eloquent

我有两个课程用户消息

我正在尝试从用户类中获取对用户消息的回复

在用户类

public function replies()
{
   return $this->messages->replies; 
} 

然而,这似乎不起作用所以我正在尝试hasManyThrough操作

public function replies() 
{
    return $this->hasManyThrough(Message::class,Message:class,'reply_id','user_id','id');
}

由于唯一的表格问题,这不起作用

执行此操作的最佳方法是什么?

我应该使用原始获取吗?

public function replies()
{
    return Message::whereIn('reply_id', $this->messages->pluck('id'))->get() 
}

请记住我可能还想要执行分页和订购功能

1 个答案:

答案 0 :(得分:-1)

为什么在只有一对多的关系时才使用hasManyThrough()

在您的情况下我会做的是在User对象中使用$this->hasMany('\App\Models\Message')

然后在Message对象中使用$this->belongsTo('\App\Models\User')

然后,您可以通过User对象执行$user->messages->replies

https://laravel.com/docs/5.3/eloquent-relationships#one-to-many

示例

用户对象:

class User extends Model {

    public function messages() {
         return $this->hasMany('App\Models\Message');
    }
}

Message对象:

class Message extends Model {

    public function user() {
         return $this->belongsTo('App\Models\User');
    }
}

然后在某种控制器功能中,例如你可以这样做:

$user = User::with('messages')->findOrFail(1);

将使用与其关联的消息返回User对象。

那么你可以这样做:

$user->messages->replies