Как выразить подзапросы Laravel для использования вwhereInPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как выразить подзапросы Laravel для использования вwhereIn

Сообщение Anonymous »

Извините, что спрашиваю о такой простой вещи, но я не могу получить документацию (https://laravel.com/docs/9.x/queries#su ... re-clauses)
Я пишу что-то вроде функции социальной сети, поэтому у меня есть таблица сообщений и таблица пользователей, есть еще одна сводная таблица, в которой я храню пользователей, на которых подписан пользователь, и они работает очень хорошо.
Я хочу представить следующий SQL в ORM Laravel
SELECT * FROM mensajes
WHERE user_id=1
OR user_id IN (SELECT seguido_id FROM seguidos WHERE user_id=1)

Идея состоит в том, что я получаю сообщения пользователя, а также сообщения от пользователей, на которых подписан пользователь.
Мое следующее решение работает, но мне кажется, что это довольно грязно и должно решаться с помощью подзапроса
// this relation returns the users the user is following, ans works correctly
$seguidos = auth()->user()->seguidos;

// I store in an array the ids of the followed users
$seg = [];
foreach ($seguidos as $s) {
array_push($seg, $s->id);
}
array_push($seg, auth()->user()->id);

// Then I retrieve all the messages from the users ids (including self user)
$this->mensajes = Mensaje::whereIn('user_id', $seg)
->orderBy('created_at', 'desc')
->get();

Мне бы хотелось все изменить, чтобы использовать подзапросы, но я этого не понимаю
$this->mensajes = Mensaje::where('user_id', auth()->user()->id)
->orWhereIn('user_id', function($query) {
// ... what goes here?
// $query = auth()->user()->seguidos->select('id');
// ???? This doesn't work, of course
}
->orderBy('created_at', 'desc')
->get();


Подробнее здесь: https://stackoverflow.com/questions/730 ... -a-wherein
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»