Laravel, która metoda jest lepsza

Laravel, która metoda jest lepsza
M2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 362
0

Witam, cały czas określone akcje robiłem w ten sposób

Kopiuj
public function destroy(CommentArticle $commentArticle){
        if ($commentArticle->user_id != Auth::id()){
            return response()->json([
                'error' => true
            ], 403);
        }

        CommentArticle::where('id', $commentArticle->id)
            ->where('user_id', Auth::id())
            ->delete();

        ReplyCommentArticle::where('comment_id', $commentArticle->id)->delete();

        return response()->json([
            'error' => false
        ], 200);
    }

lecz ostatnio pomyślałem że można to zrobić w ten sposób

Kopiuj
 public function destroy(CommentArticle $commentArticle){
        if ($commentArticle->user_id != Auth::id()){
            return response()->json([
                'error' => true
            ], 403);
        }

        CommentArticle::where('id', $commentArticle->id)
            ->where('user_id', Auth::id())
            ->delete();

        $reply = new ReplyCommentArticle();
        $reply->delete($commentArticle->id);

        return response()->json([
            'error' => false
        ], 200);
    }

``` myślę że drugi sposób jest nieco lepszy jednak nie mam co do tego pewności
IT
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 261
0

Zamiast robić 2x where, scal je do jednego w arrayu.

mr_jaro
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Grudziądz/Bydgoszcz
  • Postów: 5300
2

żaden. Nie mówię by ich nie używać ale skoro chcesz najlepszy to ci pokaże. Po pierwsze skoro już używasz route model binding to dodaj do tego używanie polices. Wtedy tam zostanie sprawdzone czy ktoś ma uprawnienia do usuwania tego komentarza.

Ok. Usunęliśmy potrzebę stosowania warunku oraz pierwszego ifa. Zakładam, że posiadasz relację utworzoną w modelu, no to możemy całość skrócić do:

Kopiuj
$commentArticle->replyCommentArticle()->delete();
$commentArticle->delete();

Jakbyś jeszcze zrobił relacje po stronie bazy z onDelete('cascade') to byś mógł zostawić tylko jedną linijkę.

EB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 51
0

Jw - połowa kodu do Policies, a skoro usunięcie komentarza ma usunąć wszystkie relacje do niego to podpiąłbym to do Eloquent events.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.