【问题标题】:Laravel use where and multiple whereHasLaravel 使用 where 和多个 whereHas
【发布时间】:2021-07-01 01:22:33
【问题描述】:

我想使用此代码对用户的帖子应用过滤器:

        $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);
                });

一切都很好,除了请求有用户ID,它通过->when($request->filled('userid'),结果为空, 我想获取已在用户帖子中标记或评论的用户,将用户 ID 提供给“标签”和“cmets”关系,我得到$q->where('taggeduser.id', $user);

但是$query->get() 是空的。

【问题讨论】:

    标签: mysql laravel eloquent orm


    【解决方案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();
    

    【讨论】:

    • 仍然没有结果,但我在 1 个帖子的标签中有 2 条记录,它什么也没返回。
    猜你喜欢
    • 2016-06-17
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多