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
Um die Syntax zu vereinfachen, stellen Sie sich die return $this->hasMany('App\Comment', 'foreign_key', 'local_key');
-Parameter folgendermaßen vor:
id
-Spalte der aktuellen Tabelle verweist (sofern Sie nicht den dritten Parameter angeben. In diesem Fall wird dies verwendet)id
der aktuellen Tabelle verknüpft werden sollIn 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');
}
$store->libraries() or $library->store()
) zurückgibt.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);