Laravel 模型使用软删除-左连接查询-表起别名示例
发布:smiling 来源: PHP粉丝网 添加日期:2022-01-17 10:05:14 浏览: 评论:0
今天小编就为大家分享一篇Laravel 模型使用软删除-左连接查询-表起别名示例,具有很好的参考价值,希望对大家有所帮助,一起跟随小编过来看看吧。
事情是这样的,有天写了一个左连接查询,由于表名太长,所以分别给起个别名,代码如下:
- 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 点了,下班。
Tags: Laravel软删除 Laravel左连接查询
- 上一篇:laravel model 两表联查示例
- 下一篇:最后一页

推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)