Laravel 模型使用软删除-左连接查询-表起别名示例
事情是这样的,有天写了一个左连接查询,由于表名太长,所以分别给起个别名,代码如下:
publicfunctiondetail() { $result=TakeOrderModel::query() ->from('take_orderasorder') ->leftJoin('take_order_detailasdetail','order.id','=','detail.take_order_id') ->get(); dd($result); }
执行后,报错Columnnotfound:1054Unknowncolumntake_order.delete_time。
查看解决办法的,直接看底部
SQL:
select*fromtake_orderasorder leftjointake_order_detailasdetail onorder.take_order_id=detail.take_order_id wheretake_order.delete_timeisnull
显而易见:软删除查询条件的表名是全名,所以报错了。
分析
软删除作用域SoftDeletingScope源码:
/** *ApplythescopetoagivenEloquentquerybuilder. * *@param\Illuminate\Database\Eloquent\Builder$builder *@param\Illuminate\Database\Eloquent\Model$model *@returnvoid */ publicfunctionapply(Builder$builder,Model$model) { $builder->whereNull($model->getQualifiedDeletedAtColumn()); }
查看getQualifiedDeletedAtColumn源码:
/** *Getthefullyqualified"deletedat"column. * *@returnstring */ publicfunctiongetQualifiedDeletedAtColumn() { return$this->qualifyColumn($this->getDeletedAtColumn()); }
查看qualifyColumn源码:
/** *Qualifythegivencolumnnamebythemodel'stable. * *@paramstring$column *@returnstring */ publicfunctionqualifyColumn($column) { return$this->model->qualifyColumn($column); }
查看qualifyColumn源码:
/** *Qualifythegivencolumnnamebythemodel'stable. * *@paramstring$column *@returnstring */ publicfunctionqualifyColumn($column) { if(Str::contains($column,'.')){ return$column; } return$this->getTable().'.'.$column; }
以上可知:$this->getTable().'.'.$column即为软删除条件的字段名。
解决办法
代码改成下面这样,加一行setTable设置表名,就可以了。
$result=(newTakeOrderModel()) ->setTable('order') ->from('take_orderasorder') ->leftJoin('take_order_detailasdetail','order.take_order_id','=','detail.take_order_id') ->get();
因为写代码时要指定具体的查询columns,有时表名真的太长,看着很不舒服,所以有此尝试。嗯,9点了,下班。
以上这篇Laravel模型使用软删除-左连接查询-表起别名示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。