webentwicklung-frage-antwort-db.com.de

Laravel hat viele und gehört zu Parametern

Ich habe einen Tabellenspeicher und Speicher hat viele Bibliotheken. In der Bibliothek habe ich einen Fremdschlüssel des Speichers store_id.

Tabelle speichern

id(PK)

Bibliothekstabelle

id(PK)
store_id(FK)

Ich bin mit den Parametern hasMany und belongsTo verwechselt, die in docs heißt 

return $ this-> hasMany ('App\Comment', 'foreign_key');

$ this-> hasMany zurückgeben ('App\Comment', 'foreign_key', 'local_key');

rückgabe von $ this-> AttractionsTo ('App\Post', 'foreign_key', 'other_key');

Welche Tabelle von hasMany foreign_key und local_key stammt von? Gleiches gilt mit tags. Zu welcher Tabelle von foreign_key und other_key kam es?

Modell speichern

public function library(){
    return $this->hasMany('App\Library', 'what_foreign_key_should_be_here','what_other_key_should_be_here');
}

Bibliotheksmodell

public function stores(){
    return $this->belongsTo('App\Stores', 'what_foreign_key_should_be_here', 'what_other_key_should_be_here');
}

Denn manchmal ändere ich meine Primärschlüssel-ID einer Tabelle in einen anderen Namen wie "sid", und ich möchte immer angeben, welcher Fremdschlüssel und welcher Primärschlüssel ist

8
Naib Sorion

Um die Syntax zu vereinfachen, stellen Sie sich die return $this->hasMany('App\Comment', 'foreign_key', 'local_key');-Parameter folgendermaßen vor:

  1. Das Modell, zu dem Sie einen Link erstellen möchten
  2. Die Spalte der Fremdtabelle (die Tabelle, zu der Sie eine Verknüpfung herstellen), die auf die id-Spalte der aktuellen Tabelle verweist (sofern Sie nicht den dritten Parameter angeben. In diesem Fall wird dies verwendet)
  3. Die Spalte der aktuellen Tabelle, die verwendet werden soll - d. H., Wenn der Fremdschlüssel der anderen Tabelle nicht mit der Spalte id der aktuellen Tabelle verknüpft werden soll

In Ihrem Fall haben Sie das Leben leicht gemacht, weil Sie store_id in der Tabelle libraries verwendet haben. Das Folgende sollte perfekt funktionieren, wenn es in Ihrem Store-Modell definiert ist:

public function libraries()
{
    return $this->hasMany('App\Library');
}

Hinter den Kulissen verknüpft Laravel automatisch die Spalte id der Tabelle Store mit der Spalte store_id der Tabelle Library.

Wenn Sie es explizit definieren wollten, würden Sie es so machen:

public function libraries(){
    return $this->hasMany('App\Library', 'store_id','id');
}
  • Ein Modellstandard ist, dass singulär benannte Funktionen ein Tois To zurückgeben, während ein Plural eine hasMany (dh $store->libraries() or $library->store()) zurückgibt.
10
James

Probier diese. Es klappt. Fügen Sie dies Ihrem Modell hinzu.

Bibliotheksmodell

public function store()
    {
        return $this->belongsTo(Store::class, 'store_id', 'id');
    }

Modell speichern

 public function library()
    {
        return $this->hasMany(Library::class);
    }

Beispielcode.

 $store = Store::find(1);
 dd($store->library);
1
Kenneth