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 相关文章推荐
php后台程序与Javascript的两种交互方式
Oct 25 PHP
php学习笔记 面向对象的构造与析构方法
Jun 13 PHP
简单的方法让你的后台登录更加安全(php中加session验证)
Aug 22 PHP
PHP面向对象学习笔记之一 基础概念
Oct 06 PHP
基于PHP创建Cookie数组的详解
Jul 03 PHP
PHP中的命名空间详细介绍
Jul 02 PHP
CI(CodeIgniter)模型用法实例分析
Jan 20 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
May 20 PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
Nov 22 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
Mar 25 PHP
PHP时间类完整代码实例
Feb 26 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模拟asp中的XmlHttpRequest实现http请求的代码
2011/03/24 PHP
自己写的兼容低于PHP 5.5版本的array_column()函数
2014/10/24 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2007/02/15 Javascript
jQuery学习笔记之jQuery的事件
2010/12/22 Javascript
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
收集json解析的四种方法分享
2014/01/17 Javascript
Javascript浮点数乘积运算出现多位小数的解决方法
2014/02/17 Javascript
跟我学Nodejs(一)--- Node.js简介及安装开发环境
2014/05/20 NodeJs
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
使用script的src实现跨域和类似ajax效果
2014/11/10 Javascript
javascript使用appendChild追加节点实例
2015/01/12 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
JS闭包用法实例分析
2017/03/27 Javascript
作为老司机使用 React 总结的 11 个经验教训
2017/04/08 Javascript
vue修改vue项目运行端口号的方法
2017/08/04 Javascript
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
2017/11/10 Javascript
微信小程序dom操作的替代思路实例分析
2018/12/06 Javascript
jQuery实现的点击图片居中放大缩小功能示例
2019/01/16 jQuery
Python的爬虫程序编写框架Scrapy入门学习教程
2016/07/02 Python
Python自定义进程池实例分析【生产者、消费者模型问题】
2016/09/19 Python
python分割列表(list)的方法示例
2017/05/07 Python
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
一篇文章快速了解Python的GIL
2018/01/12 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
python gdal安装与简单使用
2019/08/01 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
python修改linux中文件(文件夹)的权限属性操作
2020/03/05 Python
用 Python 制作地球仪的方法
2020/04/24 Python
使用Keras预训练好的模型进行目标类别预测详解
2020/06/27 Python
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
福克斯租车:Fox Rent A Car
2017/04/13 全球购物
年度考核自我鉴定
2013/11/09 职场文书
法学毕业生自我鉴定
2014/01/31 职场文书
党的群众路线教育实践活动心得体会(医院)
2014/11/03 职场文书
酒店辞职书范文
2015/02/26 职场文书