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新手上路(十一)
Oct 09 PHP
jQuery EasyUI API 中文文档 - DateBox日期框
Oct 15 PHP
新手菜鸟必读:session与cookie的区别
Aug 22 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
Sep 10 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
Oct 15 PHP
列举PHP的Yii 2框架的开发优势
Jul 03 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
Aug 16 PHP
Yii2 加载css、js 载静态资源的方法
Mar 10 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 PHP
Laravel框架分页实现方法分析
Jun 12 PHP
PHP封装的page分页类定义与用法完整示例
Dec 24 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
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
2015/09/22 PHP
对比分析php中Cookie与Session的异同
2016/02/19 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
php压缩文件夹最新版
2018/07/18 PHP
prototype 学习笔记整理
2009/07/17 Javascript
JavaScript框架(iframe)操作总结
2014/04/16 Javascript
jquery实现文本框textarea自适应高度
2016/03/09 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
2016/05/09 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
ES6中参数的默认值语法介绍
2017/05/03 Javascript
Thinkjs3新手入门之如何使用静态资源目录
2017/12/06 Javascript
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
使用vue-router为每个路由配置各自的title
2018/07/30 Javascript
layui 设置table 行的高度方法
2018/08/17 Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
2018/11/13 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
2019/03/19 jQuery
JS面向对象编程基础篇(二) 封装操作实例详解
2020/03/03 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
python字符串替换的2种方法
2014/11/30 Python
Python3.x对JSON的一些操作示例
2017/09/01 Python
Python turtle画图库&&画姓名实例
2020/01/19 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
2020/02/26 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
2020/08/20 Python
python Gabor滤波器讲解
2020/10/26 Python
Web前端绘制0.5像素的几种方法
2017/08/11 HTML / CSS
canvas像素点操作之视频绿幕抠图
2018/09/11 HTML / CSS
Html5嵌入钉钉的实现示例
2020/06/04 HTML / CSS
外企财务年会演讲稿
2014/01/03 职场文书
前厅部经理岗位职责范文
2014/02/04 职场文书
暑期学习心得体会
2014/09/02 职场文书
2015年纪委工作总结
2015/05/13 职场文书
Python爬虫基础讲解之请求
2021/05/13 Python
Django drf请求模块源码解析
2021/06/08 Python
Redis可视化客户端小结
2021/06/10 Redis