我有一个职位空缺模型,其全球范围只显示空缺职位,但在后端我需要一个复选框来切换这个空缺,以便显示所有职位空缺。复选框类型似乎只适用于本地范围。有人可以帮忙吗?
答案 0 :(得分:1)
您可以在模型上设置一个删除全局范围的本地范围。
类似的东西:
public function scopeAllVacancies($query)
{
// This is not actually how you remove a global scope,
// see https://softonsofa.com/laravel-5-eloquent-global-scope-how-to/
// for more information.
$query->removeScope(MyGlobalScope);
}
作为旁注,您无法使用https://softonsofa.com/laravel-5-eloquent-global-scope-how-to/中建议的删除方法,因为列表小部件通过引用使用对象,并且不会听取返回值这个范围。因此,为了将其删除(至少在我们实现某种形式的$query->resetQuery()
或$query->removeScope($scope)
之前),您必须在查询对象上手动删除范围。
以下是直接与查询对象进行交互以手动删除范围的示例:
/**
* Removes the provided orderby column rule from the QueryBuilder orders array to reset the orderBy for that column
*
* @param Builder $query
* @param string $orderByColumn
* @return Builder $query
*/
public function scopeRemoveOrder($query, $orderByColumn)
{
// Orders property can have mixed up integer index, flatten the array to negate any weird keys in this array
$orders = $query->getQuery()->orders;
if (is_array($orders)) {
$orders = array_values($query->getQuery()->orders);
$i = 0;
foreach ($orders as $order) {
if ($order['column'] === $orderByColumn) {
unset($orders[$i]);
}
$i++;
}
$query->getQuery()->orders = $orders;
}
return $query;
}