Laravel 模型使用软删除-左连接查询-表起别名示例


Posted in PHP onOctober 24, 2019

事情是这样的,有天写了一个左连接查询,由于表名太长,所以分别给起个别名,代码如下:

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);
}

执行后,报错 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

显而易见:软删除查询条件的表名是全名,所以报错了。

分析

软删除作用域 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 设置表名,就可以了。

$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();

因为写代码时要指定具体的查询 columns ,有时表名真的太长,看着很不舒服,所以有此尝试。嗯,9 点了,下班。

以上这篇Laravel 模型使用软删除-左连接查询-表起别名示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
抓取并下载CSS中所有图片文件的php代码
Sep 26 PHP
PHP生成唯一的促销/优惠/折扣码(附源码)
Dec 28 PHP
解析smarty 截取字符串函数 truncate的用法介绍
Jun 20 PHP
PHP中使用imagick实现把PDF转成图片
Jan 26 PHP
PHP利用imagick生成组合缩略图
Feb 19 PHP
php 变量引用与变量销毁机制详细介绍
Dec 05 PHP
php获取文件名称和扩展名的方法
Feb 07 PHP
php正则表达式基本知识与应用详解【经典教程】
Apr 17 PHP
搭建自己的PHP MVC框架详解
Aug 16 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
Sep 03 PHP
PHP底层运行机制与工作原理详解
Jul 31 PHP
php实现记事本案例
Oct 20 PHP
laravel model 两表联查示例
Oct 24 #PHP
Laravel框架之解决前端显示图片问题
Oct 24 #PHP
laravel中的fillable和guarded属性详解
Oct 23 #PHP
laravel5.6中的外键约束示例
Oct 23 #PHP
laravel5.6实现数值转换
Oct 23 #PHP
laravel框架之数据库查出来的对象实现转化为数组
Oct 23 #PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
Oct 23 #PHP
You might like
PHP开发过程中常用函数收藏
2009/12/14 PHP
PHP SEO优化之URL优化方法
2011/04/21 PHP
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
2016/10/19 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
PHP dirname(__FILE__)原理及用法解析
2020/10/28 PHP
js 鼠标拖动对象 可让任何div实现拖动效果
2009/11/09 Javascript
javascript实现避免页面按钮重复提交
2015/01/08 Javascript
Jquery easyui 实现动态树
2015/11/17 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
2016/01/23 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
2016/05/16 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
2017/08/14 jQuery
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
NodeJS实现不可逆加密与密码密文保存的方法
2018/03/16 NodeJs
[01:32]寻找你心中的那团火 DOTA2 TI9火焰传递活动今日开启
2019/05/16 DOTA
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
flask-socketio实现WebSocket的方法
2018/07/31 Python
Python开发的十个小贴士和技巧及长常犯错误
2018/09/27 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
解决Pytorch训练过程中loss不下降的问题
2020/01/02 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
什么是Python包的循环导入
2020/09/08 Python
纯CSS3实现鼠标滑过按钮动画第二节
2020/07/16 HTML / CSS
关于HTML5的22个初级技巧(图文教程)
2012/06/21 HTML / CSS
美国大城市最热门旅游景点门票:CityPASS
2016/12/16 全球购物
凯普林包包西班牙官网:Kipling西班牙
2019/04/12 全球购物
美国最大的在线生存商店:Survival Frog
2020/12/13 全球购物
什么是servlet链?
2014/07/13 面试题
个人求职信范文分享
2013/12/13 职场文书
食堂个人先进事迹
2014/01/22 职场文书
霸王洗发水广告词
2014/03/14 职场文书
民政局2016年“六一”儿童节慰问活动总结
2016/04/06 职场文书
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js