Laravel 模型使用軟刪除-左連接查詢-表起別名示例
事情是這樣的,有天寫(xiě)了一個(gè)左連接查詢,由于表名太長(zhǎng),所以分別給起個(gè)別名,代碼如下:
public function detail()
{
$result = TakeOrderModel::query()
->from('take_order as order')
->leftJoin('take_order_detail as detail', 'order.id', '=', 'detail.take_order_id')
->get();
dd($result);
}
執(zhí)行后,報(bào)錯(cuò) Column not found: 1054 Unknown column take_order.delete_time。
查看解決辦法的,直接看底部
SQL:
select * from take_order as order left join take_order_detail as detail on order.take_order_id = detail.take_order_id where take_order.delete_time is null
顯而易見(jiàn):軟刪除查詢條件的表名是全名,所以報(bào)錯(cuò)了。
分析
軟刪除作用域 SoftDeletingScope 源碼:
/**
* Apply the scope to a given Eloquent query builder.
*
* @param \Illuminate\Database\Eloquent\Builder $builder
* @param \Illuminate\Database\Eloquent\Model $model
* @return void
*/
public function apply(Builder $builder, Model $model)
{
$builder->whereNull($model->getQualifiedDeletedAtColumn());
}
查看 getQualifiedDeletedAtColumn 源碼:
/**
* Get the fully qualified "deleted at" column.
*
* @return string
*/
public function getQualifiedDeletedAtColumn()
{
return $this->qualifyColumn($this->getDeletedAtColumn());
}
查看 qualifyColumn 源碼:
/**
* Qualify the given column name by the model's table.
*
* @param string $column
* @return string
*/
public function qualifyColumn($column)
{
return $this->model->qualifyColumn($column);
}
查看 qualifyColumn 源碼:
/**
* Qualify the given column name by the model's table.
*
* @param string $column
* @return string
*/
public function qualifyColumn($column)
{
if (Str::contains($column, '.')) {
return $column;
}
return $this->getTable().'.'.$column;
}
以上可知: $this->getTable().'.'.$column 即為軟刪除條件的字段名。
解決辦法
代碼改成下面這樣,加一行 setTable 設(shè)置表名,就可以了。
$result = (new TakeOrderModel())
->setTable('order')
->from('take_order as order')
->leftJoin('take_order_detail as detail', 'order.take_order_id', '=', 'detail.take_order_id')
->get();
因?yàn)閷?xiě)代碼時(shí)要指定具體的查詢 columns ,有時(shí)表名真的太長(zhǎng),看著很不舒服,所以有此嘗試。嗯,9 點(diǎn)了,下班。
以上這篇Laravel 模型使用軟刪除-左連接查詢-表起別名示例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
wordpress安裝過(guò)程中遇到中文亂碼的處理方法
這篇文章主要介紹了wordpress安裝過(guò)程中遇到中文亂碼的處理方法,是個(gè)人項(xiàng)目中遇到的一個(gè)奇葩事件,經(jīng)過(guò)一番研究,終于解決,這里記錄下來(lái)分享給大家,有需要的小伙伴可以參考下。2015-04-04
php實(shí)現(xiàn)ffmpeg處理視頻的實(shí)踐
本文主要介紹了php實(shí)現(xiàn)ffmpeg處理視頻的實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
php檢測(cè)用戶是否用手機(jī)(Mobile)訪問(wèn)網(wǎng)站的類(lèi)
php檢測(cè)用戶是否用手機(jī)(Mobile)訪問(wèn)網(wǎng)站的類(lèi),引入這個(gè)類(lèi)就可以直接使用了,程序基于MIT License協(xié)議開(kāi)源,使用方法在下面2014-01-01
解決在laravel中l(wèi)eftjoin帶條件查詢沒(méi)有返回右表為NULL的問(wèn)題
今天小編就為大家分享一篇解決在laravel中l(wèi)eftjoin帶條件查詢沒(méi)有返回右表為NULL的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10
PHP函數(shù)getenv簡(jiǎn)介和使用實(shí)例
這篇文章主要介紹了PHP函數(shù)getenv簡(jiǎn)介和使用實(shí)例,getenv函數(shù)主要用來(lái)獲取一個(gè)環(huán)境變量的值,常見(jiàn)的PHP探針程序都是使用的getenv函數(shù),需要的朋友可以參考下2014-05-05
php中使用gd庫(kù)實(shí)現(xiàn)下載網(wǎng)頁(yè)中所有圖片
這篇文章主要介紹了php中使用gd庫(kù)實(shí)現(xiàn)下載網(wǎng)頁(yè)中所有圖片,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-05-05
PHP中使用socket方式GET、POST數(shù)據(jù)實(shí)例
這篇文章主要介紹了PHP中使用socket方式GET、POST數(shù)據(jù)實(shí)例,本文分別給出GET方式和POST方式的代碼實(shí)例,需要的朋友可以參考下2015-04-04

