2015-12-18 22 views
5

Zasadniczo chcę zapisać dane w moim modelu przy użyciu warunku, aby zapobiec jednoczesnemu wykonywaniu wielu zapisanych danych.Jak zapisać przy użyciu warunku w laravel?

Co ja obecnie zrobić to teraz:

$order = Order::find(id); 
$order->paid_amount = $amount; 
$order->status = $status; 
$order->save(); 

Co potrzebne jest:

$order = Order::find(id); 
$order->paid_amount = $amount; 
$order->status = $status; 
$order->where('last_update', $last_update); 
$order->save(); 

Czy da się to zrobić w laravel efektywnie albo muszę używać surowego sql lub zaktualizować?

+0

można po prostu użyć jeśli warunek 'if ($ zamówienia-> where ('last_update', $ last_update))' następnie zapisać –

+0

nie Will które nadal mogą powodować niespójne dane, ponieważ pobieranie i zapisywanie danych w bazie danych nie odbywa się w jednej składni aktualizacji sql? – Nameless

+0

wszystkie instrukcje zostaną wstawione/zaktualizowane po wywołaniu 'zapisz' –

Odpowiedz

1

Chyba masz na myśli

W każdym razie, myślę, że trzeba Konstruktora kwerend robić to, co chcesz:

DB::table('order') 
    ->where('id', $id) 
    ->update([ 
     'paid_amount' => $amount, 
     'status' => $status; 
     ]); 

To tak atomowy, jak można dostać.

1

Myślę, że to najlepszy sposób, aby to zrobić: „Czy to możliwe, aby to zrobić w wymowny efektywnie, czy muszę używać surowego sql lub zaktualizować”

$order = Order::where('last_update', $last_update)->find($id); 
$order->paid_amount = $amount; 
$order->status = $status; 
$order->save(); 
3

Uproszczona wersja odpowiedzi @Amarnasan:

Order::findOrFail($id)->update([ 
    'paid_amount' => $amount, 
    'status' => $status; 
]); 
Powiązane problemy