Laravel 模型使用軟刪除-左連接查詢-表起別名示例
事情是這樣的,有天寫了一個(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
顯而易見:軟刪除查詢條件的表名是全名,所以報(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)閷懘a時(shí)要指定具體的查詢 columns ,有時(shí)表名真的太長(zhǎng),看著很不舒服,所以有此嘗試。嗯,9 點(diǎn)了,下班。
以上這篇Laravel 模型使用軟刪除-左連接查詢-表起別名示例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
smarty模板引擎從php中獲取數(shù)據(jù)的方法
這篇文章主要介紹了smarty模板引擎從php中獲取數(shù)據(jù)的方法,涉及smarty變量與php代碼的混編技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01php寫app接口并返回json數(shù)據(jù)的實(shí)例(分享)
下面小編就為大家?guī)硪黄猵hp寫app接口并返回json數(shù)據(jù)的實(shí)例(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05基于php實(shí)現(xiàn)七牛抓取遠(yuǎn)程圖片
由于公司網(wǎng)站之前的用戶頭像都是存儲(chǔ)在自己的服務(wù)器上的,后來感覺管理不方便,新增加的用戶頭像都上傳到了七牛,為了方便統(tǒng)一管理,領(lǐng)導(dǎo)說把本地服務(wù)器的頭像全部遷移到了七牛2015-12-12ThinkPHP字符串函數(shù)及常用函數(shù)匯總
這篇文章主要介紹了ThinkPHP字符串函數(shù)及常用函數(shù)匯總,可供開發(fā)人員參考使用,需要的朋友可以參考下2014-07-07windows 2008r2+php5.6.28環(huán)境搭建詳細(xì)過程
這篇文章主要介紹了windows 2008r2+php5.6.28環(huán)境搭建詳細(xì)過程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06php中單個(gè)數(shù)據(jù)庫(kù)字段多列顯示(單字段分頁、橫向輸出)
這篇文章主要介紹了php中單個(gè)數(shù)據(jù)庫(kù)字段多列顯示、分行分列顯示技巧,也可稱為單字段分頁、橫向輸出,需要的朋友可以參考下2014-07-07PHP實(shí)現(xiàn)把MySQL數(shù)據(jù)庫(kù)導(dǎo)出為.sql文件實(shí)例(仿PHPMyadmin導(dǎo)出功能)
這篇文章主要介紹了PHP實(shí)現(xiàn)把MySQL數(shù)據(jù)庫(kù)導(dǎo)出為.sql文件實(shí)例(仿PHPMyadmin導(dǎo)出功能),需要的朋友可以參考下2014-05-05