2017-08-02 61 views
0

我有一本包含許多科目表(一對多關係)主題的書籍表。來自Laravel 5.3中的連接表的搜索查詢

我想加入我的表是這樣的:

$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次)

+1

嘗試添加' - > GROUPBY( 'books.id') - > PAGINATE(20);' – Maraboc

+0

它只是給我此錯誤SQLSTATE [42000 ]:語法錯誤或訪問衝突:1055'bisu_ccc_library.books.ISBN'不在GROUP BY中(SQL:從'books'中選擇不同的'books'。*,'subject'.'subject' 'books'.'id' ='subjects'.'book_id' where'subject' like%a%group by'books'.'id' order by'created_at' desc limit 20 offset 0) –

+0

女巫版的拉拉維爾你使用 ? – Maraboc

回答

0

在MySQL的文檔中提到要顯示只有當你的書ID必須組一本書(或任何其他唯一列)

->groupBy('books.id'); 

提個醒,here

SQL92及更早版本不允許查詢的選擇列表,HAVING條件或ORDER BY列表引用未在GROUP BY子句中命名的非聚集列。

因此,錯誤消息'bisu_ccc_library.books.ISBN' isn't in GROUP BY

要繞過這一點,在Laravel關閉strict,一切都會很好地工作。 轉到config/database.php和MySQL配置陣列中,更改strict => truestrict => false

+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語句用於返回唯一不同 (不同的)值。

在表格中,一列通常包含許多重複值;和 有時你只想列出不同的(不同的)值。

SELECT DISTINCT語句用於僅返回不同的 (不同)值。 - W3Schools

+0

我試圖添加截然不同的,但你仍然工作 –