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 相关文章推荐
利用discuz自带通行证整合dedecms的方法以及文件下载
Mar 06 PHP
php auth_http类库进行身份效验
Mar 19 PHP
Uchome1.2 1.5 代码学习 common.php
Apr 24 PHP
MYSQL 小技巧 -- LAST_INSERT_ID
Nov 24 PHP
PHP Memcached应用实现代码
Feb 08 PHP
一步一步学习PHP(1) php开发环境配置
Feb 15 PHP
在PHP中利用wsdl创建标准webservice的实现代码
Dec 07 PHP
Javascript与PHP验证用户输入URL地址是否正确
Oct 09 PHP
PHP中如何使用session实现保存用户登录信息
Oct 20 PHP
PHP加密技术的简单实现
Sep 04 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
visual studio code 调试php方法(图文详解)
Sep 15 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
一个可查询所有表的“通用”查询分页类
2006/10/09 PHP
用PHP调用Oracle存储过程
2006/10/09 PHP
php echo()和print()、require()和include()函数区别说明
2010/03/27 PHP
php中用foreach来操作数组的代码
2011/07/17 PHP
PHP版国家代码、缩写查询函数代码
2011/08/14 PHP
Windows中使用计划任务自动执行PHP程序实例
2014/05/09 PHP
smarty中post用法实例
2014/11/28 PHP
php静态文件生成类实例分析
2015/01/03 PHP
jQuery EasyUI API 中文文档 - Panel面板
2011/09/30 Javascript
JavaScript中将一个值转换为字符串的方法分析[译]
2012/09/21 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
2013/12/03 Javascript
javascript实现回车键提交表单方法总结
2015/01/10 Javascript
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
webpack里使用jquery.mCustomScrollbar插件的方法
2018/05/30 jQuery
JavaScript实现数组全排列、去重及求最大值算法示例
2018/07/30 Javascript
微信小程序实现自动定位功能
2018/10/31 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
[05:39]2014DOTA2西雅图国际邀请赛 淘汰赛7月14日TOPPLAY
2014/07/14 DOTA
[04:42]5分钟带你了解什么是DOTA2(第一期)
2017/02/07 DOTA
对pandas中两种数据类型Series和DataFrame的区别详解
2018/11/12 Python
python3调用windows dos命令的例子
2019/08/14 Python
利用SVG和CSS3来实现一个炫酷的边框动画
2015/07/22 HTML / CSS
Electrolux伊莱克斯巴西商店:家用电器、小家电和配件
2018/05/23 全球购物
编程用JAVA解析XML的方式
2013/07/07 面试题
酒店端午节促销方案
2014/02/18 职场文书
工业自动化专业自荐信范文
2014/04/10 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
县级领导干部开展党的群众路线教育实践活动工作汇报
2014/10/25 职场文书
催款通知书范文
2015/04/17 职场文书
机关保密工作承诺书
2015/05/04 职场文书
被告答辩状范文
2015/05/22 职场文书
Golang 如何实现函数的任意类型传参
2021/04/29 Golang
2021年最新用于图像处理的Python库总结
2021/06/15 Python
SpringRetry重试框架的具体使用
2021/07/25 Java/Android
zabbix如何添加监控主机和自定义监控项
2022/08/14 Servers