【问题标题】:Search query from joined table in Laravel 5.3从 Laravel 5.3 中的连接表中搜索查询
【发布时间】:2023-03-27 16:34:01
【问题描述】:

我有一个书本表,其中包含我的主题表上的许多主题(一对多关系)。

我尝试像这样加入我的表:

$book = Book::latest() 
    ->leftjoin('subjects', 'books.id', '=', 'subjects.book_id') 
    ->select('books.*', 'subjects.subject')
    ->where('subject', 'like', '%' .$search. '%')
    ->paginate(20);

我想要一个搜索查询,该查询将显示主题与$search 变量匹配的书籍。但是,它会根据与 $search 变量匹配的书籍的主题数量来重复显示一本书,因为一本书有很多主题。

我只想展示一本书一次,不管这本书匹配了多少个主题。

下图是我搜索查询的输出,$search= ""的值

在第二张图片上,请注意我在搜索框中搜索“a”:

题为“特殊教育评估:影响当今课堂的问题策略”的书(参见第一张图片;因为那本书的主题是 6,所以它被重复了 6 次)

【问题讨论】:

  • 尝试添加->groupBy('books.id')->paginate(20);
  • 它只是给了我这个错误 SQLSTATE[42000]: Syntax error or access violation: 1055 'bisu_ccc_library.books.ISBN' is not in GROUP BY (SQL: select distinct books.*, subjects.subject from books left join subjects on books.id = subjects.book_id where subject like %a% order@ group by @9876543339@. by created_at desc limit 20 offset 0)
  • 你用的是女巫版的 laravel 吗?

标签: laravel join eloquent


【解决方案1】:

仅在您必须按图书 ID(或任何其他唯一列)分组时才显示一本书

->groupBy('books.id');

请注意,如 MySQL 文档 here 中所述

SQL92 及更早版本不允许查询的选择列表、HAVING 条件或 ORDER BY 列表引用未在 GROUP BY 子句中命名的非聚合列。

因此出现错误消息'bisu_ccc_library.books.ISBN' isn't in GROUP BY

要绕过这个,请在​​ Laravel 中关闭 strict,一切都会正常运行。 转到config/database.php并在mysql配置数组中,将strict => true更改为strict => false

【讨论】:

    【解决方案2】:

    我认为您想使用 distinct 进行选择

    $book = Book::latest() 
        ->leftjoin('subjects', 'books.id', '=', 'subjects.book_id') 
        ->select('books.*', 'subjects.subject')
        ->distinct()
        ->where('subject', 'like', '%' .$search. '%')
        ->paginate(20);
    

    就像在常规 SQL(它将转换为)中一样,它将“强制查询仅返回不同的结果”。 (来自laravel api docs

    SELECT DISTINCT 语句用于仅返回不同的 (不同的)值。

    在一个表中,一列通常包含许多重复值;和 有时您只想列出不同的(不同的)值。

    SELECT DISTINCT 语句用于仅返回不同的 (不同的)价值观。 - W3Schools

    【讨论】:

    • 我尝试按照你说的添加 distinct,但仍然无法正常工作
    猜你喜欢
    • 2017-05-16
    • 2017-07-19
    • 2017-05-10
    • 1970-01-01
    • 2018-05-16
    • 2017-04-22
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多