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 相关文章推荐
在WIN98下以apache模块方式安装php
Oct 09 PHP
数字转英文
Dec 06 PHP
PHP伪静态页面函数附使用方法
Jun 20 PHP
php将数据库中所有内容生成静态html文档的代码
Apr 12 PHP
PHP输出XML到页面的3种方法详解
Jun 06 PHP
基于php使用memcache存储session的详解
Jun 25 PHP
php判断页面是否是微信打开的示例(微信打开网页)
Apr 25 PHP
yii框架无限极分类的实现方法
Apr 08 PHP
yii2学习教程之5种内置行为类详解
Aug 03 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
PHP定义字符串的四种方式详解
Feb 06 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
Oct 18 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
封装一个PDO数据库操作类代码
2009/09/09 PHP
php更改目录及子目录下所有的文件后缀扩展名的代码
2010/10/12 PHP
PHP 返回13位时间戳的实现代码
2016/05/13 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
PHP编程计算文件或数组中单词出现频率的方法
2017/05/22 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
图片完美缩放
2006/09/07 Javascript
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/01/13 Javascript
JQuery 简便实现页面元素数据验证功能
2007/03/24 Javascript
js 分栏效果实现代码
2009/08/29 Javascript
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
javascript中的3种继承实现方法
2016/01/27 Javascript
javascript每日必学之循环
2016/02/19 Javascript
JavaScript实现简单的拖动效果
2016/07/02 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
2016/09/05 Javascript
javascript遍历json对象的key和任意js对象属性实例
2017/03/09 Javascript
用jQuery实现圆点图片轮播效果
2017/03/19 Javascript
Webpack框架核心概念(知识点整理)
2017/12/22 Javascript
用Cordova打包Vue项目的方法步骤
2019/02/02 Javascript
JavaScript中arguments的使用方法详解
2020/12/20 Javascript
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
[48:38]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs Secret
2018/03/31 DOTA
[03:10]超级美酒第四天 fy拉比克秀 大合集
2018/06/05 DOTA
Python实现的tab文件操作类分享
2014/11/20 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
详解HTML5中的标签
2015/06/19 HTML / CSS
澳大利亚波希米亚风时尚品牌:Tree of Life
2019/09/15 全球购物
安阳殷墟导游词
2015/02/10 职场文书
2015年医院保卫科工作总结
2015/07/23 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python
mysql5.7使用binlog 恢复数据的方法
2021/06/03 MySQL
Java 超详细讲解数据结构中的堆的应用
2022/04/02 Java/Android