Maison > cadre php > PensezPHP > le corps du texte

Comment utiliser la fonction de corrélation de requêtes de ThinkPHP

WBOY
Libérer: 2023-06-03 08:01:17
avant
1693 Les gens l'ont consulté

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
Copier après la connexion

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(&#39;UserInfo&#39;, &#39;user_id&#39;);
}
}
Copier après la connexion

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 = [&#39;age&#39;];

public function userinfo(){
return $this -> hasOne(&#39;UserInfo&#39;, &#39;user_id&#39;);
}

public function getAgeAttr($value, $data){
if(isset($data[&#39;userinfo&#39;])){
return $data[&#39;userinfo&#39;][&#39;age&#39;];
}
return &#39;&#39;;
}
}
Copier après la connexion

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;
Copier après la connexion

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-à-plusieurs

L'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
Copier après la connexion

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(&#39;Order&#39;, &#39;user_id&#39;);
}
}
Copier après la connexion

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(&#39;OrderGoods&#39;, &#39;order_id&#39;);
}
}
Copier après la connexion

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, &#39;orders.goods&#39;);
var_dump($user -> orders[0] -> goods);
Copier après la connexion

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'association

2.1 Utiliser la requête d'association

Nous 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";
}
Copier après la connexion

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(&#39;orders&#39;)->get(1);
Copier après la connexion

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 associations

En 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(&#39;orders&#39;)->find(1, true);
Copier après la connexion

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal