1. Association modèle#🎜🎜 ## 🎜🎜#L'association un-à-un signifie qu'il n'y a qu'un seul enregistrement dans chacune des deux tables de données. Dans ce cas, utilisez les fonctions hasOne() et appartenir() pour effectuer l'association. Supposons que nous ayons deux tables de données, l'une est appelée table utilisateur (table utilisateur) et l'autre est la table d'informations utilisateur (table userinfo). Leurs structures respectives sont les suivantes :
user: id name userinfo: id user_id age
Les deux tables ci-dessus. are Il est associé via le champ user_id. Nous devons maintenant interroger les informations utilisateur et l'âge correspondant dans la table user. Les étapes sont les suivantes : Définissez une méthode userinfo() dans le modèle User, avec n'importe quel nom de méthode.
//User模型 <?php class User extends Model{ public function userinfo(){ return $this -> hasOne('UserInfo', 'user_id'); } }
Définissez une méthode age() dans le modèle User. Cette méthode définit en fait un attribut qui accède au champ age du modèle userinfo.
//User模型 <?php class User extends Model{ protected $readonly = ['age']; public function userinfo(){ return $this -> hasOne('UserInfo', 'user_id'); } public function getAgeAttr($value, $data){ if(isset($data['userinfo'])){ return $data['userinfo']['age']; } return ''; } }
Après avoir terminé le code ci-dessus, nous pouvons utiliser la méthode find() pour interroger l'utilisateur souhaité et son âge :
//查询user表中id为1的用户 $user = User::get(1); echo $user -> name; echo $user -> age;
Remarque : dans le code ci-dessus, nous utilisé l'attribut $readonly. L'attribut $readonly est un attribut fourni par ThinkPHP. Il peut empêcher l'écriture de certains attributs dans la base de données. Dans le code ci-dessus, nous définissons l'attribut age comme attribut en lecture seule, de sorte que lors de l'accès à $user -> age, la méthode getAgeAttr sera automatiquement appelée pour interroger le champ age dans le modèle userinfo.
1.2 Association un-à-plusieursL'association un-à-plusieurs signifie qu'une des deux tables de données a plusieurs enregistrements et un n'a qu'un seul enregistrement. Comme l'exemple suivant :
order: id user_id order_no order_goods: id order_id name price
Les deux tables ci-dessus sont liées via le champ order_id. Nous devons maintenant trouver les informations de commande de l'utilisateur et les informations sur le produit correspondantes dans la table utilisateur. Les opérations spécifiques sont les suivantes : Définir une méthode commandes() dans le modèle Utilisateur. a plusieurs commandes.
//User模型 <?php class User extends Model{ public function orders(){ return $this -> hasMany('Order', 'user_id'); } }
Définissez une méthode marchandises() dans le modèle Order. Cette méthode indique qu'une commande comporte plusieurs produits.
//Order模型 <?php class Order extends Model{ public function goods(){ return $this -> hasMany('OrderGoods', 'order_id'); } }
Après avoir défini l'association ci-dessus, nous pouvons utiliser la méthode find() pour interroger la commande de l'utilisateur et les produits correspondant à chaque commande :
//查询user表中id为1的用户的订单信息和订单的商品信息 $user = User::get(1, 'orders.goods'); var_dump($user -> orders[0] -> goods);
Le dernier paramètre ( ' commandes.goods') signifie interroger simultanément toutes ses commandes et informations sur les marchandises liées aux commandes.
2. Requête d'association2.1 Utiliser la requête d'associationNous pouvons En accédant aux attributs associés définis dans la couche modèle, les requêtes associées sont mises en œuvre sans définir la relation d'association au niveau de la couche modèle. Par exemple, nous souhaitons maintenant interroger un utilisateur et ses informations de commande :
$user = User::get(1); $orders = $user -> orders; echo $user -> name; foreach($orders as $order){ echo $order -> order_no . "\n"; }
2.2 Association retardée
Si nous ne voulons pas interroger un modèle Interroger automatiquement sa relation d'association si nécessaire. Une association retardée peut être utilisée pour répondre à cette exigence. Par exemple :
$user = User::with('orders')->get(1);
Dans le code ci-dessus, lorsque nous définissons la variable $user, nous avons défini l'association à obtenir dans la fonction with(). À ce stade, l'instruction de requête n'interrogera pas automatiquement. l'association par défaut, mais la requête attendra que nous utilisions la relation d'association.
2.3 Contenant des associationsEn plus de l'association retardée ci-dessus, nous pouvons également inclure automatiquement toutes les associations en définissant le paramètre true après le with méthode Pour répondre à nos besoins de requête. Par exemple :
$user = User::with('orders')->find(1, true);
Dans le code ci-dessus, nous avons ajouté un paramètre true à la méthode find(). Ce paramètre indique que nous souhaitons inclure toutes les relations du modèle utilisateur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!