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读注册表
Oct 09 PHP
php 破解防盗链图片函数
Dec 09 PHP
php面向对象全攻略 (十六) 对象的串行化
Sep 30 PHP
PHP 最大运行时间 max_execution_time修改方法
Mar 08 PHP
php数组函数序列之array_keys() - 获取数组键名
Oct 30 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
Jun 19 PHP
php ci 获取表单中多个同名input元素值的代码
Mar 25 PHP
yii2分页之实现跳转到具体某页的实例代码
Jun 02 PHP
PHP中仿制 ecshop验证码实例
Jan 06 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
May 11 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
May 12 PHP
PHP遍历数组的6种方式总结
Nov 17 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.NET的WebService的代码
2011/04/22 PHP
PHP+MYSQL会员系统的登陆即权限判断实现代码
2011/09/23 PHP
解析左右值无限分类的实现算法
2013/06/20 PHP
php中simplexml_load_file函数用法实例
2014/11/12 PHP
PHP进程同步代码实例
2015/02/12 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
JS 页面自动加载函数(兼容多浏览器)
2009/05/18 Javascript
JavaScript之HTMLCollection接口代码
2011/04/27 Javascript
原生js实现跨浏览器获取鼠标按键的值
2013/04/08 Javascript
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
Javascript正则控制文本框只能输入整数或浮点数
2014/09/02 Javascript
一个字符串反转函数可实现字符串倒序
2014/09/15 Javascript
辨析JavaScript中的Undefined类型与null类型
2016/05/26 Javascript
Javascript类型系统之String字符串类型详解
2016/06/21 Javascript
vue.js绑定class和style样式(6)
2016/12/09 Javascript
详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现
2017/03/11 Javascript
Vue框架之goods组件开发详解
2018/01/25 Javascript
详解Node使用Puppeteer完成一次复杂的爬虫
2018/04/18 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
2019/09/06 Javascript
layui的select联动实现代码
2019/09/28 Javascript
小程序实现列表展开收起效果
2020/07/29 Javascript
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
python之django母板页面的使用
2018/07/03 Python
python opencv实现旋转矩形框裁减功能
2018/07/25 Python
python基础梳理(一)(推荐)
2019/04/06 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
django之从html页面表单获取输入的数据实例
2020/03/16 Python
Python提取视频中图片的示例(按帧、按秒)
2020/10/22 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
资金主管岗位职责范本
2014/03/04 职场文书
班级读书活动总结
2014/06/30 职场文书
2015秋学期开学寄语
2015/05/28 职场文书