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 相关文章推荐
php4的session功能评述(二)
Oct 09 PHP
PHP 存取 MySQL 数据库的一个例子
Oct 09 PHP
深入理解PHP之require/include顺序 推荐
Jan 02 PHP
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
Jun 01 PHP
深入PHP magic quotes的详解
Jun 17 PHP
使用Linux五年积累的一些经验技巧
Jun 20 PHP
PHP面向对象程序设计之接口用法
Aug 20 PHP
phpQuery让php处理html代码像jQuery一样方便
Jan 06 PHP
php通过array_shift()函数移除数组第一个元素的方法
Mar 18 PHP
php实现水印文字和缩略图的方法示例
Dec 29 PHP
PHP+JS实现的实时搜索提示功能
Mar 13 PHP
Laravel框架实现多数据库连接操作详解
Jul 12 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中使用FastCGI解析漏洞及修复方案
2015/11/10 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
2015/12/22 PHP
PHP在线打包下载功能示例
2016/10/15 PHP
php实现多维数组排序的方法示例
2017/03/23 PHP
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
JS日期和时间选择控件升级版(自写)
2013/08/02 Javascript
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
详解JavaScript的表达式与运算符
2015/11/30 Javascript
js判断登陆用户名及密码是否为空的简单实例
2016/05/16 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
让Vue也可以使用Redux的方法
2018/05/23 Javascript
详解js常用分割取字符串的方法
2019/05/15 Javascript
javaScript中indexOf用法技巧
2019/11/26 Javascript
Python创建二维数组实例(关于list的一个小坑)
2017/11/07 Python
python最长回文串算法
2018/06/04 Python
Python设计模式之抽象工厂模式原理与用法详解
2019/01/15 Python
Python3删除排序数组中重复项的方法分析
2019/01/31 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
2019/06/21 Python
Pandas中Series和DataFrame的索引实现
2019/06/27 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
通过PHP与Python代码对比的语法差异详解
2019/07/10 Python
如何在VSCode上轻松舒适的配置Python的方法步骤
2019/10/28 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
基于CSS3实现图片模糊过滤效果
2015/11/19 HTML / CSS
美国在线珠宝商店:SZUL
2017/02/11 全球购物
西班牙床垫网上商店:Colchones.es
2018/05/06 全球购物
美国体育用品商店:Academy Sports + Outdoors
2020/01/04 全球购物
机械专业应届生求职信
2013/09/21 职场文书
保证书格式范文
2014/04/28 职场文书
阅兵口号
2014/06/19 职场文书
就业协议书
2014/09/12 职场文书
爱的教育观后感
2015/06/17 职场文书
python 调用js的四种方式
2021/04/11 Python
MySQL中正则表达式(REGEXP)使用详解
2022/07/07 MySQL