Cet article présente principalement la méthode de requête d'association de table dans Yii2.0 et analyse la méthode de mise en œuvre et les compétences d'utilisation associées de la requête d'association dans Yii sous forme d'exemples. Les amis dans le besoin peuvent se référer à ce qui suit
<.>Les exemples de cet article sont expliqués. La méthode de requête d'association de table Yii2.0 est introduite. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants : Vous pouvez utiliser ActiveRecord pour effectuer des requêtes associées (par exemple, lors de la lecture des données de la table A, lisez ensemble les données de la table B associée), dans Active Record , l'obtention des données associées peut être aussi simple que d'accéder aux propriétés de l'objet ActiveRecord dans la table principale. Par exemple, avec la déclaration de relation appropriée, vous pouvez utiliser $customer->orders pour obtenir un tableau d'objets Order représentant les commandes passées par ce client. Pour déclarer une relation, définissez une méthode getter, qui renvoie un objet yiidbActiveQuery avec les informations de contexte associées, afin que seules les données pertinentes qui remplissent les conditions soient interrogées. Par exemple :class Customer extends \yii\db\ActiveRecord { public function getOrders() { // Customer has_many Order via Order.customer_id -> id return $this->hasMany(Order::className(), ['customer_id' => 'id']); } } class Order extends \yii\db\ActiveRecord { // Order has_one Customer via Customer.id -> customer_id public function getCustomer() { return $this->hasOne(Customer::className(), ['id' => 'customer_id']); } }
$class : Le nom de classe du modèle associé.
$link: Association de colonnes entre deux tables. Cela doit être un tableau. Les clés des éléments du tableau sont les noms de colonnes de la table correspondant à $class, et les valeurs des éléments du tableau sont les noms de colonnes de la classe actuellement déclarée. Il est recommandé de définir ces relations en termes d'associations de clés étrangères de table.
Après avoir terminé la déclaration ci-dessus, vous pouvez obtenir les données associées tout comme accéder aux propriétés de l'objet en définissant la méthode getter correspondante :// get the orders of a customer $customer = Customer::findOne(1); $orders = $customer->orders; // $orders is an array of Order objects
SELECT * FROM customer WHERE id=1; SELECT * FROM order WHERE customer_id=1;
unset($customer->orders);.
class Customer extends \yii\db\ActiveRecord { public function getBigOrders($threshold = 100) { return $this->hasMany(Order::className(), ['customer_id' => 'id']) ->where('subtotal > :threshold', [':threshold' => $threshold]) ->orderBy('id'); } }
N'oubliez pas que hasMany() renvoie un objet qui est un yiidbActiveQuery, les méthodes ActiveQuery peuvent donc être utilisées pour personnaliser cette requête associée.
Avec l'instruction ci-dessus, si vous accédez à $customer->bigOrders, seules les commandes d'un montant supérieur à 100 seront renvoyées. Si vous souhaitez spécifier une valeur limite différente, utilisez le code suivant :$orders = $customer->getBigOrders(200)->all();
Remarque : La méthode associée renvoie une instance yiidbActiveQuery. Si vous y accédez en tant que propriété (propriété de classe), les données renvoyées sont une instance yiidbActiveRecord, un tableau ActiveRecord ou null. Par exemple, $customer->getOrders() renvoie une instance ActiveQuery, tandis que $customer->orders renvoie un tableau d'objets Order (ou un tableau vide si le résultat de la requête est vide).
Requête d'association de table intermédiaire
Parfois, certaines tables de données sont liées entre elles via une table intermédiaire (tableau croisé dynamique). Afin de déclarer une telle relation, nous pouvons personnaliser l'objet yiidbActiveQuery en appelant sa méthode via() ou viaTable(). Par exemple, si la table de commande order et l'élément de la table product sont liés via la table de connexion order_item, nous pouvons déclarer la relation items dans la classe Order comme suit :class Order extends \yii\db\ActiveRecord { public function getItems() { return $this->hasMany(Item::className(), ['id' => 'item_id']) ->viaTable('order_item', ['order_id' => 'id']); } }
class Order extends \yii\db\ActiveRecord { public function getOrderItems() { return $this->hasMany(OrderItem::className(), ['order_id' => 'id']); } public function getItems() { return $this->hasMany(Item::className(), ['id' => 'item_id']) ->via('orderItems'); } }
Exemples d'utilisation de formulaire dans Yii
Analyse des requêtes liées à YII
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!