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开发环境配置记录
Jan 14 PHP
用穿越火线快速入门php面向对象
Feb 22 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
Apr 09 PHP
php获取用户IPv4或IPv6地址的代码
Nov 15 PHP
ThinkPHP里用U方法调用js文件实例
Jun 18 PHP
PHP定时执行任务实现方法详解(Timer)
Jul 30 PHP
php实现的数字验证码及数字运算验证码
Jul 30 PHP
PHP基于反射机制实现插件的可插拔设计详解
Nov 10 PHP
PHP制作登录异常ip检测功能的实例代码
Nov 16 PHP
PHP迭代器和迭代的实现与使用方法分析
Apr 19 PHP
php-fpm中max_children的配置
Mar 15 PHP
PHP接口类(interface)的定义、特点和应用示例
May 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
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
php存储过程调用实例代码
2013/02/03 PHP
PHP数组去重比较快的实现方式
2016/01/19 PHP
功能强大的PHP发邮件类
2016/08/29 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
JavaScript 数组的 uniq 方法
2008/01/23 Javascript
div+css布局的图片连续滚动js实现代码
2010/05/04 Javascript
Jquery优化效率 提升性能解决方案
2010/09/06 Javascript
php对mongodb的扩展(小试牛刀)
2012/11/11 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
如何用JavaScript动态呼叫函数(两种方式)
2013/05/03 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
2016/01/04 Javascript
谈一谈bootstrap响应式布局
2016/05/23 Javascript
js只执行1次的函数示例
2016/07/20 Javascript
微信小程序开发一键登录 获取session_key和openid实例
2016/11/23 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
2017/02/21 Javascript
通过jquery的ajax请求本地的json文件方法
2018/08/08 jQuery
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
Python如何为图片添加水印
2016/11/25 Python
使用python批量化音乐文件格式转换的实例
2019/01/09 Python
dataframe 按条件替换某一列中的值方法
2019/01/29 Python
Python用字典构建多级菜单功能
2019/07/11 Python
python是否适合网页编程详解
2019/10/04 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
在keras中获取某一层上的feature map实例
2020/01/24 Python
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
2013/01/06 HTML / CSS
html5记忆翻牌游戏实现思路及代码
2013/07/25 HTML / CSS
世界上最大的糖果店:Dylan’s Candy Bar
2017/11/07 全球购物
2014年师德承诺书
2014/05/23 职场文书
Python实现拼音转换
2021/06/07 Python
利用python实时刷新基金估值(摸鱼小工具)
2021/09/15 Python
linux目录管理方法介绍
2022/06/01 Servers
JavaScript实现简单的音乐播放器
2022/08/14 Javascript