J'ai 2 modèles dans mon application, "Utilisateur" et "Type de médecine" (chaque utilisateur appartient à un type de médecine).
J'ai établi la relation un-à-plusieurs entre deux modèles à l'aide de rasé () et hasMany (). La relation hasMany () fonctionne parfaitement, mais Appartient à () ne fonctionne pas. Est-ce que quelqu'un sait où j'ai fait une erreur?
User :: find (1) -> medicine_type [ceci ne retourne rien]
MedicineType :: find (1) -> utilisateurs [renvoie utilisateurs]
Voici le code pour les modèles:
class MedicineType extends Eloquent {
public function users()
{
return $this->hasMany('User');
}
}
class User extends Eloquent {
public function medicine_type()
{
return $this->belongsTo('MedicineType');
}
}
Et voici ma structure de base de données:
users:
id
name
medicine_type_id
medicine_types:
id
name
La raison pour laquelle votre relation ne fonctionne pas n'est pas due aux relations spécifiées dans le modèle, mais à la désignation de la méthode dans le modèle User et à la non spécification de la clé étrangère.
Au lieu de:
public function medicine_type()
{
return $this->belongsTo('MedicineType');
}
Utilisation:
public function medicineType()
{
return $this->belongsTo('MedicineType', 'id');
}
J'espère que cela fonctionne pour vous;)
Tout ensemble:
<?php // app/models/MedicineType.php
class MedicineType extends Eloquent {
// Determines which database table to use
protected $table = 'medicine_types';
public function users()
{
return $this->hasMany('User');
}
}
et:
<?php // app/models/User.php
class User extends Eloquent {
// Determines which database table to use
protected $table = 'users';
public function medicineType()
{
return $this->belongsTo('MedicineType', 'id');
}
}
Tester si cela fonctionne:
$user = User::find(1);
return $user->medicineType->name;
Cela renvoie avec succès le nom du médicament_type associé.
J'espère que cela vous aide plus loin;)
Peut-être qu'il y a un problème avec Eloquent pour trouver la clé étrangère. Essaye ça:
class User extends Eloquent {
public function medicine_type()
{
return $this->belongsTo('MedicineType', 'medicine_type_id');
}
}
MODIFIER:
De plus, Eloquent essaie de trouver la table "medicinetypes" et non "medecine_types", vous devez donc le spécifier également à l'aide de la variable $table
.
class MedicineType extends Eloquent {
protected $table = 'medicine_types';
public function users()
{
return $this->hasMany('User');
}
}
Je change "medicine_type" en "medicineType" et tout va bien ...
La réponse numéro un voté pourrait être la meilleure réponse dans la plupart des cas. Toutefois, si vous rencontrez toujours des difficultés pour charger la relation associée et que vous n’avez pas de chance.
Il y a une autre chose qui peut fonctionner. Examinez chacune des tables du modèle et leurs index ou clés étrangères. Dans mon cas, j'avais changé le nom de la table mais je n'ai jamais mis à jour l'index impliqué et les clés étrangères.
Solution.
A: (Feeling Lazy) Supprimez simplement l'index ou la clé étrangère associé.
B: (Je ne suis pas paresseux) Déposer la table par migration laravel et réexécuter migrateur avec les clés étrangères appropriées.
Dans mon cas, les données des modèles associés ont été supprimées et Laravel n’obtient pas de données supprimées logiquement dans une requête générale. Pour obtenir des données supprimées par logiciel, utilisez "withTrashed () ou onlyTrashed ()".
Vous pouvez consulter la documentation ici.