Конструкция, которую я часто вижу в этом случае, заключается не в проверке всех контрактов, если у пользователя есть на это разрешение.
Вместо того, чтобы отфильтровывать контракты с политиками, обычно я видел в проектах, в которых работалВы фильтруете контракты в запросе.Это происходит главным образом потому, что если вы хотите выполнить разбивку на страницы вниз, вы хотите выполнить всю фильтрацию перед выполнением запроса, чтобы избежать появления странных данных разбивки на страницы. Если вы удалите половину контрактов в качестве примера с политиками, данные разбивки на страницы будут противоречивыми.
Там для выполнения следующего предложения запроса можно получить это.
Contract::where('user_id', $user->id)->get();
Вариант этого, который я обычно делаю, чтобы упростить для себя сам, - это создание области действия в пользовательской модели.
public function scopeOwned($query, User $user)
{
return $this->query->where('user_id', $user->id);
}
Contract::owned($user)->get();