Laravel использует where и multiple whereHas

Я хочу применить фильтр к сообщениям пользователя с помощью этого кода:

        $user = $request->userid;
        $query = Post::query()
            ->where('post.owner.username', $username)
            ->when($request->filled('userid'), function (Builder $query) use ($user) {
                    $query->whereHas('tags', function (Builder $q) use ($user) {
                        $q->where('taggeduser.id', $user);
                    })->orWhereHas('comments', function (Builder $q) use ($user) {
                        $q->where('comment.owner.id', $user);
                    });
            })
            ->when($request->filled('searchText'),
                function (Builder $query) use ($username, $searchText) {
                    $query->whereRaw(['post.owner.username' => ['$eq' => $username]]);
                    $query->getQuery()->projections = ['score' => ['$meta' => 'textScore']];
                    $query->whereRaw(['$text' => ['$search' => $searchText]])->orderByDesc('post.taken_at_timestamp');
                })
            ->when($request->filled('location'),
                function (Builder $query) use ($location) {
                    $query->where('post.location.id', $location);
                });

все в порядке, кроме запроса с идентификатором пользователя, он проходит через ->when($request->filled('userid') и результат пустой, Я хочу получить пользователей, которые были отмечены тегами или прокомментированы в сообщениях пользователя, указав идентификатор пользователя для отношений «теги» и «комментарии», я получил $q->where('taggeduser.id', $user);Laravel использует where и multiple whereHas

но $query->get() пуст.

Laravel использует where и multiple whereHas

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
55
1

Ответы 1

попробуй это

$user = $request->userid;
        $query = Post::where('post.owner.username', $username)
            ->when($request->filled('userid'), function (Builder $query) use ($user) {
                    $query->whereHas('tags', function (Builder $q) use ($user) {
                        $q->where('taggeduser.id', $user);
                    })->orWhereHas('comments', function (Builder $q) use ($user) {
                        $q->where('comment.owner.id', $user);
                    });
            })
            ->when($request->filled('searchText'),
                function (Builder $query) use ($username, $searchText) {
                    $query->whereRaw(['post.owner.username' => ['$eq' => $username]]);
                    $query->getQuery()->projections = ['score' => ['$meta' => 'textScore']];
                    $query->whereRaw(['$text' => ['$search' => $searchText]])->orderByDesc('post.taken_at_timestamp');
                })
            ->when($request->filled('location'),
                function (Builder $query) use ($location) {
                    $query->where('post.location.id', $location);
                })->get();

все еще нет результата, но у меня есть 2 записи в тегах для 1 сообщения, и он ничего не возвращает.

Mahdi Alikhani 05.04.2021 09:50

Другие вопросы по теме