wykonanie działania na wielu tabelach w Laravelu

0

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 :)

0

W sensie w czym masz konkretnie problem?
Nikt przecież tego nie zabrania.

0
  1. Chcę dodać dane do tabeli 1 ponieważ będzie to tabela ostateczna, produkt został kupiony
  2. Z tabeli 2 chcę usunąć dane ponieważ była to tabela tymczasowa, transakcja nie została jeszcze ukończona
  3. Tabelę 3 chcę zaktualizować, dokładnie kolumnę "ilość". Od obecnej ilości odjąć ilość jak została kupiona.
0

No to lecimy po kolei.
Czy wiesz jak dodawać dane do tabel?

0

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 :)

0

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 ;-)

0

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.

0

Nie rób redirect()->back(), tylko redirect(route('foo.bar'))? ;-)

Btw:

<form onsubmit="confirm('Czy na pewno chcesz to zrobić?')">
...
</form>
0

Jak teraz wygląda Twój kod i co konkretnie próbujesz osiągnąć?

0

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

0

W sensie nie możesz go tak przekierować (dlaczego?) czy co Cię powstrzymuje?
Obawiam się, że niestety nadal nie rozumiem, o co Ci chodzi.

0

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?

0

Route::get <-> method="post"

Na marginesie: to jest akcja formularza, nie przekierowanie.

0

ok, rozumiem czyli jak by to miało ostatecznie wyglądać?
może tak?
Route::post('/delete-user/{id}', 'AccountController@deleteuser');

1

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ą ;-)

0

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 :)

1

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1