如果我使用toSql()转储查询的sql,我得到这个:
select * from `permissions` inner join `vendor_permissions` on `permissions`.`id` = `vendor_permissions`.`permission_id` where `vendor_permissions`.`vendor_id` = ?
但是发送到我的数据库的ACTUAL查询是这样的:
select `permissions`.*, `vendor_permissions`.`vendor_id` as `pivot_vendor_id`, `vendor_permissions`.`permission_id` as `pivot_permission_id` from `permissions` inner join `vendor_permissions` on `permissions`.`id` = `vendor_permissions`.`permission_id` where `vendor_permissions`.`vendor_id` = ?
如你所见,它们有点不同。为什么是这样?我试图清除关系的查询缓存,为此我需要能够获得正在使用的实际查询,所以我该怎么做?
答案 0 :(得分:0)
要重建实际正在运行的查询,您需要添加到选择枢轴列。这个功能可以做到:
function buildRelationQuery($relation)
{
$wheres = $relation->newPivotStatementForId(null)->wheres;
$select = [$relation->getRelated()->getTable().'.*'];
foreach($wheres as $w) {
$select[] = $relation->getTable().'.'.$w['column'].' as pivot_'.$w['column'];
}
$relation->getQuery()->addSelect($select);
return $relation;
}
因此,要清除关系属性的缓存,可以执行以下操作:
Cache::forget(
buildRelationQuery($model->relationattribute())
->getQuery()
->getQuery()
->getCacheKey()
);
答案 1 :(得分:0)
查看正在运行哪些查询的最简单方法是使用barryvdh的Laravel Debugbar:
Laravel 4
https://github.com/barryvdh/laravel-debugbar/tree/1.8
Laravel 5
https://github.com/barryvdh/laravel-debugbar
通过这种方式,您无需在需要时编写特定的代码定位代码,只需单击底部的便捷栏即可查看已执行的查询。
该事件具有“堆叠查询”,允许您查看在请求期间触发的事件执行的查询。