Не вдаваясь в детали, все в моем коде работает должным образом , но результаты дампа не соответствуют логике.
Итак, здесь, в моем классе репозитория, я выкидываю модель.
$query = $this->model->customerWithCentralBillingChildren($customer);
dd($query);
customerWithCentralBillingChildren
является локальной областью, определенной в Model
.
public function scopeCustomerWithCentralBillingChildren($query, Customer $customer)
{
$accdes = [CUT] // doesn't matter
return $query->whereIn('accde', $accdes);
}
Существует также глобальная область, которая применяется через класс, реализующий Scope
. Расположен в \App\Scopes
:
class SyncActive implements Scope
{
/**
* 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->where('sync_active', '=', true);
}
}
Моя проблема заключается в том, что при выводе $query
в массиве отображаются только глобальные области действия.
Builder {#858 ▼
#query: Builder {#859 ▶}
#model: Transaction {#676 ▶}
#eagerLoad: []
#localMacros: []
#onDelete: null
#passthru: array:13 [▶]
#scopes: array:1 [▼
"App\Scopes\SyncActive" => SyncActive {#677} <- global scope here, but why no local one?
]
#removedScopes: []
}
Тогда единственный способ увидеть, что дамп-запрос имеет также локальную область видимости, - это дамп:
dd($query->toSql());
Что дает:
"select * from `sync_transactions` where `accde` in (?, ?, ?, ?, ?, ?) and `sync_active` = ?"
тогда я вижу локальную область видимости:
where `accde` in (?, ?, ?, ?, ?, ?)
, а также глобальная область:
`sync_active` = ?
Это предполагаемое поведение? Почему дамп scopes
элемент массива содержит только глобальную область видимости?