Когда вы получаете данные для отображения, вы можете вообще не использовать модели.
Весьма странным выглядит то, что вы запоминаете время оплаты за каждое блюдо в рамках одного заказа. Не приходит в голову случай, при котором такое может понадобиться... И почему это именно один заказ, а не несколько...
public function handle(OrderUpdatedEvent $event)
{
$changes = collect($event->order->getChanges());
if ($changes->has('status')) {
$status = $changes->get('status');
if ($status === Order::PAID) {
$event->order->paid_at = now();
$event->order->saveQuietly();
}
if ($status === Order::CANCEL && $event->order->isPaid() && !$event->order->isReverted() && $event->order->isNonCashType()) {
# При отмене заказа:
# если заказ был оплачен, не было полного возврата и тип оплаты безналичный
# делаем возврат денежных средств
resolve(OrderService::class)->reverse($event->order);
}
}
}
in_array($order->status, [Order::NEW, Order::WORK]);
public function authorize()
{
return $this->user()->can('update', [
$this->order,
[
'user_id' => $this->user_id,
'table_id' => $this->table_id,
'total_person' => $this->total_person,
'status' => $this->status,
]
]);
}
public function update(User $user, Order $order, array $params = [])
{
if ($user->isEmployee()) {
# employee нельзя обновлять заказ другого пользователя
# employee должен назначить заказ сначала на себя
if ($user->id !== $order->user_id && $user->id != $params['user_id']) {
return false;
}
}
if ($user->isAdmin()) {
# admin может изменять заказы только у себя или у employee
if (!$order->user?->isEmployee() || $user->id !== $order->user_id) {
return false;
}
}
if (isset($params['table_id']) || isset($params['user_id']) || isset($params['total_person'])) {
return $order->canUpdate();
}
if (isset($params['status'])) {
return $order->canUpdate('status');
}
}
Route::controller(\App\Http\Controllers\Admin\EmployeeController::class)->prefix('/employees')->group(function() {
Route::get('/', 'getAll')->can('getEmployees', 'project');
Route::get('/{user}', 'show')->can('getEmployee', 'project');
Route::delete('/{user}', 'destroy')->can('deleteEmployee', 'project');
});
Не твой заказ - иди нахрен.
if ($this->user()->isEmployee()) {
# employee нельзя обновлять заказ другого пользователя
# employee должен назначить заказ сначала на себя, чтобы потом обновлять
if ($this->user()->id !== $this->order->user_id && $this->user()->id != $this->user_id) {
return false;
}
}
Но после истечения этой задержки я все равно должен посмотреть, а не пришло ли что-то для меня.