2016-07-10 16 views
0
public function getDeleteQuote($quote_id) 
{ 
    $quote = Quote::find($quote_id); 
    $author_id = $quote->author_id; 
    $total_quote = DB::table('quotes')->where('author_id' , $author_id)->count(); 
    $author_deleted = false; 

    if($total_quote === 1) 
    { 
     $auth_deleted = DB::table('authors')->where('id' , $author_id)->delete(); 
     $author_deleted = true; 
    } 
    $quote->delete(); 
    $msg = $author_deleted ? 'Quote And Author Deleted !' : 'Quote Deleted !' ; 
    return redirect()->route('home')->with([ 
     'success' => $msg 
    ]); 
} 

In den ersten 3 Zeilen verwende ich zwei Suche in der gleichen Tabelle eine für finden Sie quote_id und andere zum Zählen, wie viel Zitat in der gleichen Autor. Aber ich möchte das nur eine einzige Abfrage machen. Wie kann ich das machen ?Wie man zählen und in einer einzelnen Abfrage auf derselben Tabelle auf Laravel Query Builder suchen?

+0

Legen Sie den gesamten Code zur Seite. Stattdessen bieten Sie richtige CREATE und INSERT-Anweisungen und ein gewünschtes Ergebnis – Strawberry

+0

Sie können dies wahrscheinlich viel besser mit Beziehungen tun und auch mit Kaskade löschen, also auf löschen entfernen zugehörigen Autor zu, etc, aber braucht ein bisschen mehr, um zu erreichen, was Sie wollen –

Antwort

0

Angenommen, Sie haben das Angebotsmodell, das auf die Tabelle 'Angebote' und das Autorenmodell verweist, das der Tabelle 'Autoren' zugeordnet ist, geben Sie die Beziehung in der Angebotsklasse an.

Dann können Sie den Abfragegenerator in einer Variablen speichern, die die Beziehungsfunktion aufruft und sie verwendet.

public function getDeleteQuote($quote_id) 
{ 
    //Get The Quote Object 
    $quote = Quote::find($quote_id); 

    //Get the query builder from relationship and store in a variable 
    $quote_query = $quote->authors(); 

    //Delete authors with condition 
    $author_deleted = ($quote_query->count() === 1) ? $quote_query->delete() : false; 

    //Delete the Quote 
    $quote->delete(); 

    $msg = $author_deleted ? 'Quote And Author Deleted !' : 'Quote Deleted !' ; 
    return redirect()->route('home')->with([ 
     'success' => $msg 
    ]); 
} 

P.S. Wenn die Beziehung Eins-zu-Eins ist $this->hasOne('App\Author');

+0

yeah, danke, dass du einen Fehler mit meiner Datenbankbeziehung hast –

+0

wenn du beschreibst, wie das Zitatmodell funktioniert und eine Beziehung mit Autormodellen herstellen, dann werde ich sehr hilfreich sein. Danke im Voraus. –

0

wird versuchen und sehen, ob das funktionieren kann:

Hier ist das Zitat Modell sagt mit der Beziehung Autoren:

class Quote extends Model 
{ 
    /** 
    * get the associated author for the quote 
    */ 
    public function authors(){ 
     return $this->hasOne(Author::class); 
    } 

} 

Das das Zitat mit seinem Autor usw. finden:

public function getDeleteQuote($quote_id) 
{ 
    $quote = Quote::findOrFail($quote_id)->with('authors'); 

    if($quote->authors->count() > 0){ 
     $author_deleted = $quote->authors->delete(); 
    } 

    $quote->delete(); 

    return route('home')->with('success' => ($author_deleted) ? 'Quote And Author Deleted !' : 'Quote Deleted !'); 
} 

Nichts zu testen, also nicht sicher, ob es Probleme usw. anzeigen wird, abhängig von Ihrer Einrichtung usw., aber schauen Sie nach Beziehungen etc, aber hoffentlich hilft es.

+0

Vielen Dank Herr Simon Davies, mein Problem wird gelöst, aber ich bin dankbar, wenn Sie mir beschreiben, wie das funktionieren kann .... if ($ quote-> authors-> count()> 0) { $ author_deleted = $ quote-> autoren-> delete(); } –

+0

nicht sicher, ob dies gewünscht wird, aber es überprüft, ob die Autoren zählen größer als 0 ist, so hat es einige dann versucht, sie zu löschen, eine boolean 0 oder 1 so True oder False, die $ Author_Deleted Var. , hoffe das hilft :-) –

+0

ja ich will das, aber ich möchte wissen, wie $ quote-> autoren-> count() funktioniert? –

Verwandte Themen