Laravel 模型使用软删除-左连接查询-表起别名示例
今日,长沙网络推广将为大家分享一篇关于Laravel模型使用软删除、左连接查询以及表起别名的示例文章。对于从事Web开发的同学们来说,这具有很好的参考价值,希望大家能够从中受益。
在实际开发中,我们经常会遇到需要进行数据库查询的情况。有一次,我在写一个左连接查询时,由于表名过长,为了提高代码的可读性和维护性,我决定给表起别名。下面是当时的代码:
```php
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'。原来,软删除查询条件的表名是全名,而我使用的别名并没有在查询条件中生效。
为了解决这个问题,我们需要深入了解Laravel的软删除机制。在软删除作用域(SoftDeletingScope)的源码中,我们可以看到在应用软删除作用域时,会使用`getQualifiedDeletedAtColumn`方法来获取完全限定的“删除时间”列名。这个方法会调用`qualifyColumn`方法,将列名与模型表名结合起来。我们需要确保在查询中使用正确的表名。
解决办法很简单,我们只需要在查询前设置表名即可。修改后的代码如下:
```php
public function detail()
{
$result = TakeOrderModel::query()
->setTable('take_order as order') // 设置表名
->leftJoin('take_order_detail as detail', 'order.id', '=', 'detail.take_order_id')
->whereNull(function ($query) {
$query->from('order')->whereNull('order.delete_time'); // 使用别名进行查询
})
->get();
dd($result);
}
```
在这个深秋的黄昏,我们的故事与一场数据库的奇妙冒险有关。在这个故事中,有一个叫做TakeOrderModel的英雄模型,它正在勇敢地面对一个挑战——处理冗长的表名。让我们看看它是如何施展魔法,将复杂的查询变得简洁而有力的。
编程语言
- Laravel 模型使用软删除-左连接查询-表起别名示例
- PHP使用FFmpeg获取视频播放总时长与码率等信息
- js下拉选择框与输入框联动实现添加选中值到输入
- 浅谈jQuery为哪般去掉了浏览器检测
- php基于环形链表解决约瑟夫环问题示例
- asp vbcrlf是什么意思
- 仅9张思维导图帮你轻松学习Javascript 就这么简单
- Angular实现的table表格排序功能完整示例
- PHP文件锁函数flock()详细介绍
- 浅谈javascript-两种注释,声明变量,定义函数
- 浅谈ASP.NET MVC应用程序的安全性
- Vue2.5学习笔记之如何在项目中使用和配置Vue
- 解析SQL Server中SQL日期转换出错的原因
- golang与php实现计算两个经纬度之间距离的方法
- 一个字符串中出现次数最多的字符 统计这个次数
- PHP实现取得HTTP请求的原文