Association un-à-un dans le modèle ThinkPHP5

Définissez une relation un-à-un. Par exemple, un utilisateur a des données personnelles.
En fait, la table dans le programme n'est pas directement créée par Navicat ou d'autres outils au début, mais via le diagramme ER, qui reflète la relation entre une table et un graphe La relation entre une certaine table provient de l'établissement de la table correspondante, qui est liée par la clé étrangère.
Commencez par créer un tableau pour l'utilisateur, comme indiqué dans la figure:
Insérez la description de l'image ici
Remplissez le contenu:
Insérez la description de l'image ici
créez un tableau et
Insérez la description de l'image ici
remplissez le contenu pour info :
Insérez la description de l'image ici
Ici, nous devons savoir que dans le paramètre, nous pensons que chaque utilisateur ne peut avoir qu'une seule information personnelle, donc la relation entre l'utilisateur et la table d'informations doit être une relation un-à-un (c'est-à-dire qu'un utilisateur correspond à une information personnelle), commençons l'association dans le modèle.

Créez User.php et Info.php dans le modèle:

<?php

namespace app\index\model;
use think\Model;
class User extends Model
{
    public function profile(){
        //hasOne()方法中第一个为关联的模型名称,第二个为关联的外键,
        //所以这里分别是Info模型和uid外键
        return $this->hasOne('Info','uid');
    }

    public function Memberdata(){
        $Member= new User();
        $data=$Member->with('profile')->select();
        return $data ;
    }
}

Le code de la couche de contrôle est le suivant:

<?php
namespace app\index\controller;
use app\index\model\User;
use think\Controller;
class Index extends Controller{
    
    public function index(){
        $MemberData= new User();
        $data=$MemberData->Memberdata();
        return json($data);
    }
    
}

Les résultats sont les suivants:
Insérez la description de l'image ici
Si vous ne souhaitez entrer que du contenu de champ, il vous suffit d'ajouter la méthode field () pour le filtrer.

public function profile(){
        //hasOne()方法中第一个为关联的模型名称,第二个为关联的外键,
        //所以这里分别是Info模型和uid外键
        return $this->hasOne('Info','uid')->field('uid,phone,email');
}

Si vous souhaitez interroger les données du modèle actuel en fonction des conditions de requête de la table associée, vous pouvez utiliser la méthode hasWhere dans la couche de contrôle, par exemple:

public function index(){

        $user = User::hasWhere('profile',['email'=>'cc.com'])->find();
        echo $user->username;

    }

Pour plus de méthodes d'association un-à-un, veuillez vous référer au manuel officiel:

https://www.kancloud.cn/manual/thinkphp5/142357

Enfin, en raison du préchargement associé dans le modèle, lorsque la grande quantité de données est importante, elle peut se charger plus rapidement que la méthode jion (), que ce soit LeftJion, RightJion ou InnerJion, je vous recommande donc d'utiliser davantage le modèle.

Je suppose que tu aimes

Origine blog.csdn.net/hgb24660/article/details/100162940
conseillé
Classement