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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。