2016-12-14 5 views
0

у меня есть два класса пользователя и Сообщение,hasManyThrough на той же модели

Я пытаюсь получить ответы на сообщения пользователя из пользовательского класса, таким образом,

в пользовательском классе

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

вы хотите, чтобы получить все ответы на все сообщения от пользовательской модели? – aimme

+0

@aimme, что правильно – Kendall

+0

как насчет использования 'with'? – aimme

ответ

-1

Почему вы используете hasManyThrough(), когда это только один ко многим отношений?

Что бы я делал в вашем случае, это использование объекта пользователя $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

Пример

Объект User:

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 
+0

Я не думаю, что у вас есть это правильно. Я пытаюсь получить ответы «другими пользователями» на его сообщения. Я думал, используя hasmanythrough я бы использовать reply_to как внешний ключ на себе, но без псевдонимов я получаю проблемы – Kendall

Смежные вопросы