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
- PHP中MySQL、MySQLi和PDO的用法和區別PHPMySql
- SQL語句中不同的連線JOIN及SQL中join的各種用法SQL
- PHP 中 bind 的用法 self 和 static 的區別PHP
- Python中threading的join和setDaemon的區別及用法[例子]Pythonthread
- PHP中引號的用法PHP
- php中的continue用法PHP
- 帶你瞭解資料庫中JOIN的用法資料庫
- PHP中的連線字元. 的用法PHP字元
- MapReduce框架-Join的使用框架
- PHP中ZendCache用法的小例子PHP
- sql中的join、left join、right joinSQL
- 一張圖說明SQL的join用法SQL
- php中split()用法PHP
- Laravel框架中 getClientIps() 原理和用法Laravel框架client
- php在yii2中的cookie用法PHPCookie
- 一張圖看懂 SQL 的各種 join 用法SQL
- Mysql join 的本質,Nested Loop Join 和 Hash JoinMySqlOOP
- PHP Session的用法PHPSession
- Fork/Join 框架框架
- Fork/Join框架框架
- JS中的!=、== 、!==、=== 的用法和區別JS
- JS中的!=、== 、!==、===的用法和區別。JS
- left join,right join,inner join的條件on和where的區別
- js中try和catch的用法JS
- C#中?和??及?:的用法C#
- 去掉php框架CI預設url中的index.phpPHP框架Index
- PHP 轉 Go,用 Laravel、thinkphp 的用法造了一個 ThinkGo 框架PHPGoLaravel框架
- Inner Join, Left Outer Join和Association的區別
- Java Fork/Join 框架Java框架
- PHP 中的 -> 和 :: 的區別PHP
- 深入Oracle的left join中on和where的區別詳解Oracle
- PHP中關於foreach的簡單的用法總結PHP
- SQL中的Filter, join, semi-join等概念的釋義SQLFilter
- js中!和!!的區別與用法JS
- Java 中 this 和 super 的用法詳解Java
- React中的Context和Portals用法ReactContext
- sql中union和union all的用法SQL