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单件模式结合命令链模式使用说明
Sep 07 PHP
浅析php header 跳转
Jun 17 PHP
浅析Apache中RewriteCond规则参数的详细介绍
Jun 30 PHP
php编写的简单页面跳转功能实现代码
Nov 27 PHP
MongoDB在PHP中的常用操作小结
Feb 20 PHP
PHP中创建和验证哈希的简单方法实探
Jul 06 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
Aug 21 PHP
php远程下载类分享
Apr 13 PHP
php快速排序原理与实现方法分析
May 26 PHP
JSON两种结构之对象和数组的理解
Jul 19 PHP
php7 图形用户界面GUI 开发示例
Feb 22 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实现WEB动态网页静态
2006/10/09 PHP
php5 and xml示例
2006/11/22 PHP
php 获取SWF动画截图示例代码
2014/02/10 PHP
PHP统计当前在线用户数实例讲解
2015/10/21 PHP
详解PHP实现执行定时任务
2015/12/21 PHP
PHP递归实现层级树状展开
2016/04/01 PHP
thinkPHP5.0框架应用请求生命周期分析
2017/03/25 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
JS实现浏览器状态栏文字闪烁效果的方法
2015/10/27 Javascript
node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
2017/01/20 Javascript
Bootstrap框架安装使用详解
2017/01/21 Javascript
从setTimeout看js函数执行过程
2017/12/19 Javascript
Vue+axios实现统一接口管理的方法
2018/07/23 Javascript
vue+vuex+json-seiver实现数据展示+分页功能
2019/04/11 Javascript
vue下使用nginx刷新页面404的问题解决
2019/08/02 Javascript
关于layui时间回显问题的解决方法
2019/09/24 Javascript
vue实现图片上传预览功能
2019/12/23 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
Python Web框架Tornado运行和部署
2020/10/19 Python
学习Python selenium自动化网页抓取器
2018/01/20 Python
详解Python装饰器
2019/03/25 Python
python使用MQTT给硬件传输图片的实现方法
2019/05/05 Python
opencv python在视屏上截图功能的实现
2020/03/05 Python
python中pdb模块实例用法
2021/01/15 Python
CSS3实现伪类hover离开时平滑过渡效果示例
2017/08/10 HTML / CSS
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
一份比较全的PHP面试题
2016/07/29 面试题
北京某公司的.net笔试题
2014/03/20 面试题
高校辅导员推荐信范文
2013/12/25 职场文书
西门豹教学反思
2014/02/04 职场文书
小学数学国培感言
2014/03/10 职场文书
法制宣传实施方案
2014/03/13 职场文书
电子装配专业毕业生求职信
2014/04/23 职场文书
Python如何让字典保持有序排列
2022/04/29 Python
详解Vue3使用axios的配置教程
2022/04/29 Vue.js