Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Laravel] save vs update
Terrorizer
post 6.06.2020, 12:16:07
Post #1





Grupa: Zarejestrowani
Postów: 345
Pomógł: 3
Dołączył: 31.03.2012

Ostrzeżenie: (0%)
-----


Cześć!

Czy istnieje jakaś sensowna różnica pomiędzy update i save?

A może ja zwyczajnie źle z tego korzystam?

  1. namespace App\Services;
  2.  
  3. use App\Resource as Resource;
  4. use Illuminate\Support\Facades\Auth;
  5.  
  6. class ResourcesService
  7. {
  8.  
  9. public function addResources1($userId, $wood, $stone, $food, $gold)
  10. {
  11. $resources = new Resource;
  12. $resources = $resources->where('userId', $userId)->update([
  13. 'wood' => $wood,
  14. 'stone' => $stone,
  15. 'food' => $food,
  16. 'gold' => $gold,
  17. ]);
  18. }
  19.  
  20. public function addResources2($userId, $wood, $stone, $food, $gold)
  21. {
  22. $resources = new Resource;
  23. $resources = $resources->where('userId', $userId)->first();
  24. $resources->wood = $wood;
  25. $resources->stone = $stone;
  26. $resources->food = $food;
  27. $resources->gold = $gold;
  28. $resources->save();
  29. }
  30. }


Ten post edytował Terrorizer 6.06.2020, 12:18:19
Go to the top of the page
+Quote Post
netir
post 7.06.2020, 01:54:02
Post #2





Grupa: Zarejestrowani
Postów: 44
Pomógł: 5
Dołączył: 20.05.2019

Ostrzeżenie: (0%)
-----


Save pozwala Ci odłożyć w czasie zapis do bazy i wykonać w dogodnym momencie, a update zapisuje natychmiast. Dodatkowo odpalają się różne eventy podczas update i save.

W prostych przypadkach, gdzie nie ma zawiłych relacji używaj update(), nie ma sensu rozpisywać tego do save tak jak zrobiłeś.

Jeżeli chodzi o przykład save() to wyobraź sobie jakiś złożony proces zakupowy, gdzie masz wiele relacji, ale zapis chcesz wykonać na sam koniec procesu np.

  1. //Tworzysz instancje koszyka, wrzucasz to co już masz
  2. $cart = new Cart();
  3. $cart->fill($request->all('name'));
  4.  
  5. //Tworzysz adres, ale nie chcesz jeszcze zapisywać, żeby nie śmiecić w bazie i nie usuwać jak coś się nie uda
  6. //Tutaj zapewne była by jakaś logika w service layer, ale dla przykładu daje tak
  7. $address = new ClientAddress();
  8. $address->fill($request->input('address'));
  9.  
  10. //Kolejna relacja niezbędna przy utworzeniu koszyka
  11. $book = Book::find($request->book_id);
  12.  
  13. //Rozpoczynamy transakcję, jeżeli coś pójdzie nie tak to cofamy bo nie możemy pozwolić na brakujące relacje
  14. DB::beginTransaction();
  15.  
  16. try {
  17. $cart->book()->associate($book);
  18. $address->save();
  19. $cart->address()->associate($address);
  20. $cart->save();
  21.  
  22. } catch (\Exception $e)
  23. {
  24. //Coś nie wyszło, cofamy i wywalamy error
  25. DB::rollBack();
  26.  
  27. return false;
  28. }
  29.  
  30. //Wszystko ok, cart z relacjami zostaje w bazie
  31. DB::commit();
  32. return true;


Oczywiście to nadal duże uproszczenie, ale do takiego koszyka możesz dołożyć o wiele więcej relacji.

Ten post edytował netir 7.06.2020, 01:59:04
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 10:46