我有一个书桌,其中包含我主题表上的许多主题(一对多关系)。
我试着像这样加入我的桌子:
$book = Book::latest()
->leftjoin('subjects', 'books.id', '=', 'subjects.book_id')
->select('books.*', 'subjects.subject')
->where('subject', 'like', '%' .$search. '%')
->paginate(20);
我想要一个搜索查询,该搜索查询将显示具有与$search
变量匹配的主题的书籍。然而,由于一本书有很多科目,因此它会根据在$ search变量上匹配的书的主题数量而冗余地显示一本书。
我只想一次出版一本书,无论这本书匹配多少科目。
下面的图片是我所做的搜索查询的输出,$search= ""
这本书名为“特殊教育评估:影响当今教室的问题策略”(见第一张图片;自该书的主题为6册以来,它已多次出现6次)
答案 0 :(得分:0)
我认为您希望将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语句用于仅返回distinct (不同的)价值观。
在表格中,列通常包含许多重复值;和 有时您只想列出不同的(不同的)值。
SELECT DISTINCT语句用于仅返回distinct (不同的)价值观。 - W3Schools
答案 1 :(得分:0)
仅在必须按图书ID(或任何其他唯一列)分组时才显示图书
->groupBy('books.id');
请注意,正如MySQL doc 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