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下载远程文件类(支持断点续传)
Nov 14 PHP
PHP数组排序函数合集 以及它们之间的联系分析
Jun 27 PHP
php断点续传之如何分割合并文件
Mar 22 PHP
PHP的switch判断语句的“高级”用法详解
Oct 01 PHP
php将图片保存入mysql数据库失败的解决方法
Dec 27 PHP
php项目中百度 UEditor 简单安装调试和调用
Jul 15 PHP
PHP实现QQ登录实例代码
Jan 14 PHP
php 实现进制相互转换
Apr 07 PHP
php安装扩展mysqli的实现步骤及报错解决办法
Sep 23 PHP
深入理解PHP中mt_rand()随机数的安全
Oct 12 PHP
Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析
May 15 PHP
PHP 99乘法表的几种实现代码
Oct 13 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发送邮件类代码附详细说明
2008/07/10 PHP
Apache中php.ini的设置方法
2013/02/28 PHP
php一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
php创建session的方法实例详解
2015/01/27 PHP
XHProf报告字段含义的解析
2016/05/17 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
PHP模糊查询技术实例分析【附源码下载】
2019/03/07 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
JS无限树状列表实现代码
2011/01/11 Javascript
Javascript基础教程之for循环
2015/01/18 Javascript
Node.js中的流(Stream)介绍
2015/03/30 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
2016/03/30 Javascript
jQuery中使用animate自定义动画的方法
2016/05/29 Javascript
js实现密码强度检验
2017/01/15 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
Vue 修改网站图标的方法
2020/12/31 Vue.js
vue实现轮播图帧率播放
2021/01/26 Vue.js
详解python多线程、锁、event事件机制的简单使用
2018/04/27 Python
Python缓存技术实现过程详解
2019/09/25 Python
TensorFlow实现指数衰减学习率的方法
2020/02/05 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
Python实现石头剪刀布游戏
2021/01/20 Python
Python字节单位转换(将字节转换为K M G T)
2021/03/02 Python
HTML5 input元素类型:email及url介绍
2013/08/13 HTML / CSS
为你的html5网页添加音效示例
2014/04/03 HTML / CSS
史泰博(Staples)中国官方网站:办公用品一站式采购
2016/09/05 全球购物
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
解释下列WebService名词:WSDL、SOAP、UDDI
2012/06/22 面试题
2014年最新领导班子整改方案
2014/09/27 职场文书
Python中基础数据类型 set集合知识点总结
2021/08/02 Python