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中使用Sockets 从Usenet中获取文件
Jan 10 PHP
php中CI操作多个数据库的代码
Jul 05 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
Jun 25 PHP
php获取textarea的值并处理回车换行的方法
Oct 20 PHP
php从数组中随机选择若干不重复元素的方法
Mar 14 PHP
THINKPHP支持YAML配置文件的设置方法
Mar 17 PHP
Symfony2学习笔记之控制器用法详解
Mar 17 PHP
Laravel日志用法详解
Oct 09 PHP
php一个文件搞定微信jssdk配置
Dec 12 PHP
php生成图片缩略图功能示例
Feb 22 PHP
PHP crc32()函数讲解
Feb 14 PHP
PHP网页缓存技术优点及代码实例
Jul 29 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
destoon实现公司新闻详细页添加评论功能的方法
2014/07/15 PHP
一个比较不错的PHP日历类分享
2014/11/18 PHP
PHPStrom 新建FTP项目以及在线操作教程
2016/10/16 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
php之可变函数的实例详解
2017/09/13 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
js实现ASP分页函数 HTML分页函数
2006/09/22 Javascript
来自chinaz的ajax获取评论代码
2008/05/03 Javascript
extjs grid设置某列背景颜色和字体颜色的方法
2010/09/03 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
2013/10/15 Javascript
vue2 router 动态传参,多个参数的实例
2017/11/10 Javascript
基于vue2.x的电商图片放大镜插件的使用
2018/01/22 Javascript
react-native android状态栏的实现
2018/06/15 Javascript
使用jquery的cookie实现登录页记住用户名和密码的方法
2019/03/13 jQuery
php结合js实现多条件组合查询
2019/05/28 Javascript
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
2020/04/25 Javascript
[07:55]2014DOTA2 TI正赛第三日 VG上演推进荣耀DKEG告别
2014/07/21 DOTA
python解析文件示例
2014/01/23 Python
Python中类型关系和继承关系实例详解
2015/05/25 Python
Python的语言类型(详解)
2017/06/24 Python
深入理解Python3 内置函数大全
2017/11/23 Python
python 重命名轴索引的方法
2018/11/10 Python
python+pyqt5编写md5生成器
2019/03/18 Python
IE8下CSS3选择器nth-child() 不兼容问题的解决方法
2016/11/16 HTML / CSS
专门出售各种儿童读物的网站:Put Me In The Story
2016/08/07 全球购物
Waterford美国官网:爱尔兰水晶制品品牌
2017/04/26 全球购物
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
软件工程专业推荐信
2013/10/28 职场文书
大四本科生的自我评价
2013/12/30 职场文书
小学优秀班集体申报材料
2014/05/25 职场文书
婚宴邀请函
2015/01/30 职场文书
2015年员工工作表现评语
2015/03/25 职场文书
幸福终点站观后感
2015/06/04 职场文书
使用tensorflow 实现反向传播求导
2021/05/26 Python
Django数据库(SQlite)基本入门使用教程
2022/07/07 Python