在Laravel中获取关系背后的Query Builder对象


Getting the Query Builder object behind fetching a relation in Laravel

我们在用户模型中使用belongsToMany()对自引用关系进行了建模。用户可以是彼此的代理或卖家,因此我们定义了seller()agents()

现在我们正在使用https://github.com/Nayjest/Grids其需要对网格进行查询。

例如,在网格中,我们希望显示卖家的代理。

目前,我们正在使用手工制作的查询,但我们希望从模型中提取逻辑。

因此,我们需要的是在获取时执行的查询(作为查询生成器对象)

$seller = Auth::user(); // or any other instance of User
$seller->agents

我们试过

$query = $seller->newQuery()->where('laravel_reserved_1.id', '=', $seller->id);
return $user->agents()->getRelationQuery($query, $query);

没有运气。

编辑

尝试$seller->agents()->getQuery()我们得到

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in order clause is ambiguous
 (SQL: select * from `users` inner join `user_connections` on 
`users`.`id` = `user_connections`.`user_id` 
where `user_connections`.`related_user_id` = 2 and        
`user_connections`.`type` = agent order by `id` asc 
limit 15 offset 0) 

原来它只是

$user->agents()->getQuery()

我们在网格中有一个列"id",这导致了稍后过程中的模糊查询。