J'ai un magasin de table, et le magasin a beaucoup de bibliothèques, dans la bibliothèque j'ai la clé étrangère du magasin store_id
.
Table de magasin
id(PK)
Table de bibliothèque
id(PK)
store_id(FK)
Je suis confus avec les paramètres hasMany
et belongsTo
incluent, dans docs
return $ this-> hasMany ('App\Comment', 'foreign_key');
return $ this-> hasMany ('App\Comment', 'foreign_key', 'local_key');
return $ this-> appartientTo ('App\Post', 'foreign_key', 'other_key');
De quelle table hasMany foreign_key et local_key sont-elles venues? De même avec Appartient à quelle table de foreign_key et other_key sont-elles venues?
Modèle de magasin
public function library(){
return $this->hasMany('App\Library', 'what_foreign_key_should_be_here','what_other_key_should_be_here');
}
Modèle de bibliothèque
public function stores(){
return $this->belongsTo('App\Stores', 'what_foreign_key_should_be_here', 'what_other_key_should_be_here');
}
Parce que parfois je change l'identifiant de la clé primaire d'une table en un autre nom comme sid, je veux donc toujours spécifier laquelle est la clé étrangère et la clé primaire
Pour simplifier la syntaxe, considérez les paramètres return $this->hasMany('App\Comment', 'foreign_key', 'local_key');
comme suit:
id
de la table actuelle (sauf si vous spécifiez le troisième paramètre, auquel cas il l'utilisera)id
de la table actuelleDans votre cas, puisque vous avez utilisé store_id
dans la table libraries
, vous vous êtes rendu la vie facile. Les éléments ci-dessous devraient fonctionner parfaitement lorsqu'ils sont définis dans votre modèle Store
:
public function libraries()
{
return $this->hasMany('App\Library');
}
Dans les coulisses, Laravel liera automatiquement la colonne id
de la table Store
à la colonne store_id
de la table Library
.
Si vous vouliez le définir explicitement, procédez comme suit:
public function libraries(){
return $this->hasMany('App\Library', 'store_id','id');
}
$store->libraries() or $library->store()
).Essaye celui-là. Ça marche. Ajoutez ceci à votre modèle.
Modèle de bibliothèque
public function store()
{
return $this->belongsTo(Store::class, 'store_id', 'id');
}
Modèle de magasin
public function library()
{
return $this->hasMany(Library::class);
}
exemple de code.
$store = Store::find(1);
dd($store->library);