Witam, jak jednym kliknięciem wykonać działanie które do jednej tabeli doda dane, w drugiej je zaktualizuje a z trzeciej usunie?
Dokładniej:
Mam przycisk na stronie który jest już finalizacją pewnej akcji. Po jego kliknięciu, oczywiście jest to przycisk formularza, dane z formularza muszą zostać dodane do 'tabeli1', w 'tabeli2' musi zostać zaktualizowany rekord o id przekazanym w formularzu a w 'tabeli3' rekord o danym id musi zostać usunięty. Mam nadzieję że teraz jest jaśniej :)]
Dzięki :)
W sensie w czym masz konkretnie problem?
Nikt przecież tego nie zabrania.
- Chcę dodać dane do tabeli 1 ponieważ będzie to tabela ostateczna, produkt został kupiony
- Z tabeli 2 chcę usunąć dane ponieważ była to tabela tymczasowa, transakcja nie została jeszcze ukończona
- Tabelę 3 chcę zaktualizować, dokładnie kolumnę "ilość". Od obecnej ilości odjąć ilość jak została kupiona.
No to lecimy po kolei.
Czy wiesz jak dodawać dane do tabel?
Nie wiem jak połączyć to w całość i wykonać jednocześnie. Dodawanie wykonuję w funkcji store()
, edycję w update()
a usuwanie w destroy()
a tutaj muszę to połączyć w jedno zadanie :)
Nikt nie broni Ci przecież zrobić wszystkiego w jednej metodzie - to nie jest tak, że akcje bazodanowe są sprzężone z nazwą metody w kontrolerze ;-)
OK, rozumiałem :D teraz jeszcze jak przekierować trasę z formularza np w przypadku usunięcia. Mam taki kod:
w kontrolerze:
public function deleteuser($id){
User::where('id', $id)
->delete();
return redirect() -> back();
}
w blade:
<form action="{{ url('delete', $user->id) }}" method="post" id="delete-form-{{$user->id}}" style="display: none;">
{{ csrf_field() }}
{{ method_field('DELETE') }}
</form>
<a href="" onclick="
if(confirm('Czy na pewno chcesz usunąć tego użytkownika?')){
event.preventDefault();
document.getElementById('delete-form-{{$user->id}}').submit();
}else{
event.preventDefault();
}">
<button class="btn btn-danger users">Usuń</button>
</a>
w route:
Route::get('/delete/{id}', 'AccountController@deleteuser');
po wykonaniu otrzymuję:
No message
kiedy skieruje formularz na:
<form action="{{ route('account.destroy', $user->id) }}" method="post"
wszystko jest ok.
Nie rób redirect()->back()
, tylko redirect(route('foo.bar'))
? ;-)
Btw:
<form onsubmit="confirm('Czy na pewno chcesz to zrobić?')">
...
</form>
Jak teraz wygląda Twój kod i co konkretnie próbujesz osiągnąć?
Po prostu chcę usunąć dane z bazy tylko zamiast formularz kierować na <form action="{{ route('account.destroy', $user->id) }}" method="post"
chcę go przekierować na konkretną funkcję deleteuser
W sensie nie możesz go tak przekierować (dlaczego?) czy co Cię powstrzymuje?
Obawiam się, że niestety nadal nie rozumiem, o co Ci chodzi.
Mogę jednak powstrzymuje mnie błąd, wydaje mi się że robię coś źle w web.php lub formularzu,
mam taki kod w web.php
Route::get('/delete-user/{id}', 'AccountController@deleteuser');
i takie przekierowanie formularza:
<form action="{{ url('delete-user', $user->id) }}" method="post"
czy to jest ok?
Route::get
<-> method="post"
Na marginesie: to jest akcja formularza, nie przekierowanie.
ok, rozumiem czyli jak by to miało ostatecznie wyglądać?
może tak?
Route::post('/delete-user/{id}', 'AccountController@deleteuser');
Tak, w taki sposób powinno zadziałać - natomiast nie jest to poprawne podejście.
Laravelowo powinno to wyglądać tak:
Route::delete('/users/{id}', 'UsersController@delete');
Czyli nie powinieneś tworzyć routingu /add-user
, /delete-user
, /update-user
itd., tylko raczej /users
, /users/create
itd. i nie powinieneś bać się wykorzystywać innych metod ponad get
czy post
- po to one są ;-)
ok, a jeszcze przy dodawaniu. W dokumentacji jest taki kod:
DB::table('users')->insert([
['email' => '[email protected]', 'votes' => 0],
['email' => '[email protected]', 'votes' => 0]
]);
i jak on ma wyglądać aby dane odebrane z formularza przeszły przez request
?
pierwsza wartość czyli w tym przypadku'email'
to nazwa kolumny w bazie, druga, czyli [email protected]
to wartość domyślna, dobrze rozumiem? w miejsce votes
daje $request
a na końcu nazwa pola z formularza? czyli całość wygląda tak ['email' => '[email protected]', $request => 'email']
? Nie wiem czy dobrze zrozumiałem także proszę o info, dzięki :)
to wartość domyślna
Po prostu wartość
.
a na końcu nazwa pola z formularza?
['email' => $request->get('email'), 'votes' => $request->get('votes'), ...]
Przy czym znacznie lepiej jest zapisywać dane przez modele, nie bezpośredni dostęp do bazy.