1

我有两个类UserMessage

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

在用户类中

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() 
}

请记住,我可能还想执行分页和排序功能

4

1 回答 1

-1

hasManyThrough()当它只是一对多关系时,为什么要使用它?

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

然后在 Message 对象内使用$this->belongsTo('\App\Models\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');
    }
}

消息对象:

class Message extends Model {

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

然后在某种控制器功能中,例如,您可以执行以下操作:

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

这将返回带有与之关联的消息的用户对象。

那么你可以这样做:

$user->messages->replies
于 2016-12-14T17:08:31.490 回答