Mysql
 sql >> Base de données >  >> RDS >> Mysql

Yii Table jointe mais toutes les données sélectionnées ne sont pas récupérées

Les jointures sont mieux utilisées dans Yii en créant des Relations , de cette façon vous n'aurez pas besoin d'écrire des requêtes complexes

Commencez par ajouter des clés étrangères dans vos tables sql (par exemple, ajoutez un patientId de clé étrangère dans la chaise)

Ensuite, si vous régénérez votre modèle, vous pouvez voir les relations ajoutées automatiquement (ou vous pouvez ajouter manuellement les relations)

public function relations()
{

    return array(
        'chairs' => array(self::HAS_MANY, 'chair', 'patientId'),
    );
}

Et dans le modèle de chaise, vous verrez la relation

'patient' => array(self::BELONGS_TO, 'patient', 'patientId'),

Définir la relation seule vous permet d'accéder aux valeurs du modèle interrogé en tant que $model->relationName, si vous souhaitez utiliser une colonne dans la condition "où", utilisez la requête suivante dans votre ou vos fonctions de modèle

$patients=Patient::model()->findAll(array(
                'condition' => "$field like '%$value%'",
                'with'=>array('chairs'),
                'select'=> "*",
                )); 

Le mot clé "with" est important et peut prendre un tableau de liste de relations à inclure dans la requête. La condition de requête s'appliquera à toutes les tables incluses. Vous pouvez ignorer le mot-clé "with" ici si vous ne souhaitez pas interroger un champ d'une autre table et n'avez besoin que des données de sortie liées.

Et vous pouvez accéder aux fauteuils attribués au patient en

foreach($patients as $patient)print_r($patient->chairs);

Il existe également d'autres approches, comme celle discutée ici

Pour en savoir plus sur les relations, allez ici