Il existe deux types d'associations entre tables dans Yii2, qui sont utilisées pour spécifier l'association entre deux modèles.
Un-à-plusieurs : hasMany
Un-à-un : hasOne (apprentissage recommandé : tutoriel yii )
Résultats de retour : Les résultats de retour de ces deux méthodes sont des objets yiidbActiveQuery
Le premier paramètre : le nom de classe du modèle associé.
Le deuxième paramètre : est un tableau, où les clés sont les attributs du modèle associé et les valeurs sont les attributs du modèle actuel.
Utilisation de l'association
Maintenant, nous obtenons toutes les informations de commande d'un client
$customer = Customer::findOne(1); $orders = $customer->orders; // 通过在Customer中定义的关联方法(getOrders())来获取这个客户的所有的订单。
Les deux lignes de code ci-dessus généreront l'instruction SQL suivante
SELECT * FROM customer WHERE id=1; SELECT * FROM order WHERE customer_id=1;
Mise en cache des résultats de l'association
Si la commande du client change, nous l'appelons à nouveau
$orders = $customer->orders;
Lorsque vous recevrez à nouveau la commande, vous constaterez que il n'y a aucun changement. La raison en est que la base de données ne sera interrogée que lorsque $customer->orders est exécuté pour la première fois, et les résultats seront mis en cache et SQL ne sera pas exécuté lors des requêtes suivantes.
Et si je veux réexécuter SQL ? Vous pouvez exécuter
unset($customer->orders); $customer->orders;
puis récupérer des données de la base de données.
Description du code :
// 执行sql语句: SELECT * FROM customer WHERE id=1 $customer = Customer::findOne(1); //执行sql:SELECT * FROM order WHERE customer_id=1 $orders1 = $customer->orders; //这个不会执行sql,直接使用上面的缓存结果 $orders2 = $customer->orders; //如果中间的用户订单有变化,我们就不能从缓存中获取,要unset掉 unset($customer->orders); $orders2 = $customer->orders;
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!