英文:
How to use a sub_query with a table that has soft delete?
问题
我有一个查询和一个子查询,看起来像这样:
// $query not included here
$query = $query->getQuery();
$subQuery = User::select('*')
->fromSub($query, 'sub_query')
->where($status, 'LIKE', '%' . $statusValue . '%')
->with($this->eagerLoadedRelationships)
->get();
但我收到以下错误消息:Column not found: 1054 Unknown column 'users.deleted_at' in 'where clause'
。当我从我的User模型中移除use SoftDeletes;
时,它可以正常工作。但我需要那个软删除功能。
我尝试过User::withoutTrashed()->select('*')...
,但问题仍然存在。
有没有办法我可以解决这个问题?
我不能在select
中列出列,而且我必须使用这个子查询来检查前一个查询的结果(我不能在前一个查询中添加where()
)。
英文:
I have a query and a subquery that looks like this:
// $query not included here
$query = $query->getQuery();
$subQuery = User::select('*')
->fromSub($query, 'sub_query')
->where($status, 'LIKE', '%' . $statusValue . '%')
->with($this->eagerLoadedRelationships)
->get();
But I get the following error: Column not found: 1054 Unknown column 'users.deleted_at' in 'where clause'
. When I remove use SoftDeletes;
in my User model, it works fine. But I need that soft delete.
I tried User::withoutTrashed()->select('*')...
but it's the same.
Is there a way for me to go around this?
I can't list the columns inside select
. And I kinda have to use this sub query to check the results of the previous query (I can't add where()
to the previous query).
答案1
得分: 1
尝试以下代码:
$subQuery = User::select('*')
->fromSub($query, 'sub_query')
->where($status, 'LIKE', '%' . $statusValue . '%')
->whereNull('deleted_at')
->with($this->eagerLoadedRelationships)
->get();
英文:
Try following
$subQuery = User::select('*')
->fromSub($query, 'sub_query')
->where($status, 'LIKE', '%' . $statusValue . '%')
->whereNull('deleted_at')
->with($this->eagerLoadedRelationships)
->get();
答案2
得分: 0
$query = $query->getQuery();
// 使用 "toBase()" 来从子查询中移除全局作用域,包括软删除作用域
$subQuery = User::select('*')
->fromSub($query->toBase(), 'sub_query')
->where($status, 'LIKE', '%' . $statusValue . '%')
->with($this->eagerLoadedRelationships)
->get();
By calling toBase() on the subquery, you are essentially getting the underlying Query Builder instance without any global scopes applied, including the soft delete scope. This should allow you to run the subquery without encountering the "Column not found" error related to deleted_at.
英文:
$query = $query->getQuery();
// Use "toBase()" to remove the global scopes from the subquery, including soft delete scope
$subQuery = User::select('*')
->fromSub($query->toBase(), 'sub_query')
->where($status, 'LIKE', '%' . $statusValue . '%')
->with($this->eagerLoadedRelationships)
->get();
By calling toBase() on the subquery, you are essentially getting the underlying Query Builder instance without any global scopes applied, including the soft delete scope. This should allow you to run the subquery without encountering the "Column not found" error related to deleted_at.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论