1

UserMessageの2 つのクラスがあります。

したがって、ユーザークラスからユーザーのメッセージへの返信を取得しようとしています

ユーザークラスで

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

ただし、これはうまくいかないようなので、 hasManyThrough 操作を試しています

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

固有のテーブルの問題のため、これも機能しません

この操作を実行する最良の方法は何ですか?

raw get を使用する必要がありますか?

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

ページネーションと順序付け機能も実行したい場合があることを心に留めておいてください

4

1 に答える 1

-1

hasManyThrough()1 対多の関係しかないのに、なぜ使用しているのですか?

あなたの場合に私がすることは、 User オブジェクトの use 内$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');
    }
}

メッセージ オブジェクト:

class Message extends Model {

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

次に、たとえば、ある種のコントローラー関数内で次のことができます。

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

関連付けられているメッセージを含む User オブジェクトを返します。

したがって、次のことができます。

$user->messages->replies
于 2016-12-14T17:08:31.490 に答える