2016-10-18 3 views
1

Ich habe zwei Tabellen:Konzept der Tabelle, die Beziehungen in Laravel

  • Cards
  • Notes

Jede Karte hat mehrere Hinweise. Also gibt es eine Beziehung zwischen ihnen wie folgt:

class Card extends Model { 

    public function notes() 
    { 
     return $this->hasMany(Note::class); 
    } 
} 

Ok gut, alles in Ordnung.


Jetzt brauche ich das Konzept dieser beiden Linien zu verstehen:

$card()->$notes()->first(); 

und

$card()->$notes->first(); 

Was ist der Unterschied zwischen ihnen? Wie Sie in der ersten sehen $note() ist eine Funktion und in der zweiten $note ist keine Funktion. Wie werden sie in PHP übersetzt?

Die erste weist auf die card Tabelle und die zweite verweist auf die notes Tabelle, richtig? oder was? Jedenfalls bin ich geblieben, um das Konzept von tham zu verstehen.

+0

'Notizen $() 'ist die Methode, während' $ notes 'die Eigenschaft eines Objekts ist. –

Antwort

3

Ich weiß nicht über $ vor dem $notes in Ihrem Code, aber wenn Sie versuchen, etwas wie das zu sagen.

1- $card->notes()->first(); 
2- $card->notes->first(); 

Im Code in Zeile 1, zuerst müssen Sie ein $card Modell und dann wollten Sie alle notes() zu diesem $card Zusammenhang mit dem Zugang und wegen () nach notes Zugabe einfach Sie query builder auf Notizen aufrufen zeigen, können Sie führen Sie danach eine andere Datenbankabfragefunktion aus, etwa where, orderBy, groupBy, ... und jede andere komplizierte Datenbankabfrage.

Aber in dem zweit Sie tatsächlich Zugang zu einem collection von Notizen zu diesen $card Zusammenhang erhalten, können wir sagen, dass Sie alle zugehörigen Notizen aus der Datenbank erhalten und in Laravel Sammlungen eingestellt und Sie sind nicht mehr in der Lage zu führen Datenbankabfrage auf notes.

Hinweis: weil Laravel Sammlungen einige Methoden wie where(), groupBy(), whereIn(), sort(), ... haben, können Sie sie auf dem zweiten verwenden, aber in diesem Fall führen Sie diese Methoden Sammlungen und nicht Datenbank, you already get all results from database

+0

danke .. upvote – stack