У меня есть 3 модели
- Пользователь
- Канал
- Ответить
модельные отношения
-
user
имеютbelongsToMany('App\Channel');
-
channel
имеютhasMany('App\Reply', 'channel_id', 'id')->oldest();
скажем, у меня есть 2 канала - канал-1 - канал-2
channel-2
имеет последние ответы, чем channel-1
теперь, я хочу заказать канал пользователя по его текущему ответу канала. точно так же, как приложение для чата. как я могу заказать пользовательский канал именно так?
- канал-2
- канала 1
Я уже пробовал некоторые коды. но ничего не происходит
// User Model
public function channels()
{
return $this->belongsToMany('App\Channel', 'channel_user')
->withPivot('is_approved')
->with(['replies'])
->orderBy('replies.created_at'); // error
}
// also
public function channels()
{
return $this->belongsToMany('App\Channel', 'channel_user')
->withPivot('is_approved')
->with(['replies' => function($qry) {
$qry->latest();
}]);
}
// but i did not get the expected result
ИЗМЕНИТЬ Кроме того, я пробовал это. да, я получил ожидаемый результат, но он не будет загружать весь канал, если нет ответа.
public function channels()
{
return $this->belongsToMany('App\Channel')
->withPivot('is_approved')
->join('replies', 'replies.channel_id', '=', 'channels.id')
->groupBy('replies.channel_id')
->orderBy('replies.created_at', 'ASC');
}
ИЗМЕНИТЬ: