У меня есть полиморфное отношение.
Class Reply
public function replyable()
{
return $this->morphTo();
}
Который принадлежит User
и Trainer
.
Когда я получаю ответы, я хочу, чтобы ответ аутентифицированного пользователя был помещен первым.
Таким образом, если пользователь с правами доступа является тренером, ответ тренера должен быть первым, а пользователь с правами доступа - обычным пользователем, ответ пользователя должен быть первым.
Это то, что я получил сейчас.
public function index(Question $question)
{
if (!! trainer()) {
//if an auth user is a trainer, place their posts first in the response data
return $question->replies()->orderByRaw("FIELD(replyable_id, ".trainer()->id.") DESC")->inRandomOrder()->with('replyable', 'question')->paginate(15);
}
if (auth()->check()) {
//if an auth user is a normal user, place their posts first in the response data
return $question->replies()->orderByRaw("FIELD(replyable_id, ".auth()->id().") DESC")->inRandomOrder()->with('replyable', 'question')->paginate(15);
}
return $question->replies()->with('replyable', 'question')->inRandomOrder()->paginate(15);
}
Мне нужно ограничить запрос на основе replyable_type
.Таким образом, пользователь auth является тренером, ответы должны быть упорядочены вначале с ответом, который имеет replyable_type
из App\Trainer
с replyable_id
любого идентификатора аутентифицированного пользователя (тренера).
Этот запросне работает.
if (!! trainer()) {
//if an auth user is a trainer, place their posts first in the response data
return $question->replies()->orderByRaw("where replyable_type = trainers FIELD(replyable_id, ".trainer()->id.") DESC")->inRandomOrder()->with('replyable', 'question')->paginate(15);
}