php的lavarel框架中join和orWhere的用法
1. 前景題要:
在一個專案中,我遇到了需要聯表查詢的情況,同時聯表之後需要通過一個關鍵詞來篩選出對應的資料,就比如我這裡需要對角色名字、使用者名稱稱、電話這幾個欄位,通過傳入的一個keyword欄位進行篩選。
2. 問題分析:
此時我需要把使用者表聯絡上我們的訂單表,訂單表中有user_id的欄位,從而可以得到訂單的使用者名稱稱,這裡首先講一下join
(聯表)的用法。
常用的有三種join()、leftJoin()、rightJoin(),分別是內連線、左連線、右連線
.
內連線:
在兩張表進行連線查詢時,只保留兩張表中完全匹配的結果集。即兩張表的交集。
左連線:
在兩張表進行連線查詢時,會返回左表所有的行,即使在右表中沒有匹配的記錄。即左表中存在的資料對應在右表中不存在,依舊會返回左表中的資料。
右連線:
在兩張表進行連線查詢時,會返回右表所有的行,即使在左表中沒有匹配的記錄。與左連線恰好相反。
接著需要寫查詢的條件語句,我們首先 第一步需要查詢有效的訂單,其次第二步才是根據傳入的keyword進行篩選,此處在最開始的情況下我是直接使用where和orWhere混合進行查詢,但遇到了總是會有些查詢條件未被包含進去,此處我查了相關資料才弄明白,我們此處可以將利用keyword篩選的查詢寫成一個閉包,從而不與其他where語句產生相互的影響。
3. 解決方案:
注:orWhere如果不用閉包的形式寫很容易寫成分開的查詢條件
$order_res = Order::join('user', 'order.user_id', '=', 'user.id')->select('order.*', 'user.title')//此處只是將有用的資訊選擇在聯表中。
->where('state', '=', 1) //首先就是將有效的訂單篩選出來。
->where(function($query) use ($keyword){//再在此閉包中根據keyword關鍵詞來進行篩選。
$query->where('order.mobile', 'like', '%'.$keyword.'%')
->orWhere('user.title', 'like', "%{$keyword}%")//此處用了兩個orWhere查詢,都是or的關係,會將三種條件任意一個滿足的資料篩選出來。
->orWhere('order.character_title', 'like', "%{$keyword}%");
});
相關文章
- mysql中的left join、right join 、inner join的詳細用法MySql
- Python中threading的join和setDaemon的區別及用法[例子]Pythonthread
- SQL語句中不同的連線JOIN及SQL中join的各種用法SQL
- PHP 中 bind 的用法 self 和 static 的區別PHP
- PHP中引號的用法PHP
- 帶你瞭解資料庫中JOIN的用法資料庫
- PHP中的連線字元. 的用法PHP字元
- MapReduce框架-Join的使用框架
- Laravel框架中 getClientIps() 原理和用法Laravel框架client
- PHP中ZendCache用法的小例子PHP
- 一張圖說明SQL的join用法SQL
- PHP Session的用法PHPSession
- Mysql join 的本質,Nested Loop Join 和 Hash JoinMySqlOOP
- 一張圖看懂 SQL 的各種 join 用法SQL
- Fork/Join框架框架
- Fork/Join 框架框架
- JS中的!=、== 、!==、=== 的用法和區別JS
- PHP 轉 Go,用 Laravel、thinkphp 的用法造了一個 ThinkGo 框架PHPGoLaravel框架
- Inner Join, Left Outer Join和Association的區別
- oracle中的CURRVAL和NEXTVAL用法Oracle
- React中的Context和Portals用法ReactContext
- C#中?和??及?:的用法C#
- js中try和catch的用法JS
- Java中ThreadLocal的用法和原理Javathread
- Java Fork/Join 框架Java框架
- PHP 中的 -> 和 :: 的區別PHP
- SQL 查詢 exist join in 的用法和相應的適用場景 (最佳化查詢)SQL
- C# WebSocketSharp 框架的用法C#Web框架
- React 中 getDerivedStateFromProps 的用法和反模式React模式
- Python中__init__的用法和理解Python
- js中!和!!的區別與用法JS
- Java 中 this 和 super 的用法詳解Java
- sql中union和union all的用法SQL
- python中的join()函式Python函式
- PHP 手冊中的匿名函式關聯用法分析PHP函式
- oracle知識整理(1) union和union all的區別,left join和right join的區別(各種join的區別)Oracle
- join、inner join、left join、right join、outer join的區別
- JUC之Fork/Join框架框架