【问题标题】:How to combine two grouped whereIn clauses with Where not in Laravel如何在 Laravel 中将两个分组的 whereIn 子句与 Where not 组合
【发布时间】:2021-07-27 02:02:07
【问题描述】:

我尝试在 Laravel eloquent 中使用以下 mysql 子句:

SELECT * FROM pages
INNER JOIN page_translations as pt
ON pages.id = pt.page_id
WHERE NOT (page_id IN (93) AND locale IN ('de', 'en'));

但是,由于“WHERE NOT”,我无法实现它,相反,只使用 WHERE 没有问题。

所以我走了这么远:

Page::join('page_translations as pt', 'pages.id', '=', 'pt.page_id')
            ->where(function($query) use ($homes) {
                $query->whereIn('pages.id', $homes->values()->toArray());
                $query->whereIn('locale', $homes->keys()->toArray());
            })
            ->get();

我试图通过使用 'whereRaw' 或 Raw 子句来解决它,但这并没有真正帮助。

如果有人可以告诉我如何将此 SQL 查询带到 Laravel Eloquent,那就太好了。

【问题讨论】:

  • 你为什么不使用关系?
  • 你的意思是你要使用whereNotIn??
  • 我需要对项目进行排序,这就是我使用联接的原因

标签: mysql laravel eloquent


【解决方案1】:

尝试使用whereNotIn 执行查询:

Page::join('page_translations as pt', 'pages.id', '=', 'pt.page_id')
            ->where(function($query) use ($homes) {
                $query->whereNotIn('pages.id', $homes->values()->toArray());
                $query->whereNotIn('locale', $homes->keys()->toArray());
            })
            ->get();

【讨论】:

  • 嗨,我试过了,但结果并不正确。
  • locale 列在 page_translations 中对吗?
  • 我认为你写错了SQL语句。请执行此语句并告诉我您是否想要此结果? SELECT * FROM pages INNER JOIN page_translations as pt ON pages.id = pt.page_id and pages.id not in (2) and locale not in ('de', 'en');
【解决方案2】:

好的,虽然我最终在途中使用了不同的方法,但我想出了如何使用上述 sql 查询进行雄辩的查询,因此解决方案实际上非常简单:

Page::join('page_translations as pt', 'pages.id', '=', 'pt.page_id')
        ->whereRaw("not (page_id in (?) and locale in (?)", ,[93], ['de', 'en'])
        ->get();

【讨论】:

    猜你喜欢
    • 2015-10-06
    • 2021-03-23
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 2012-11-28
    • 2017-11-29
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多