Yii已加入表但未检索到所有选定数据

时间:2013-01-04 12:17:21

标签: php mysql yii return-value yii-cmodel

我的控制器中有以下标准。

    $criteria = new CDbCriteria;
    $criteria->select = 't.*,b.*,c.*';
    $criteria->join = "INNER JOIN tbl_patient_chair b ON b.patient = '0005'
                        INNER JOIN tbl_chair c ON b.chair = c.Serial_No";
    $criteria->condition = "t.client_id = '0005'";

    $model = Patient::model()->findAll($criteria);

    $this->render('view', array(
        'model' => $model
    ));

然后在我看来,我试图通过执行以下操作来检索所有选定的数据:

foreach ($model as $models)
  print_r($model);

但是在结果中我可以看到第二和第三张表中没有数据。第一个表的数据已成功检索,但我无法显示其他表的数据。

谁能告诉我我做错了什么?

1 个答案:

答案 0 :(得分:1)

通过创建关系,最好在Yii中使用联接,这样您就不需要编写复杂的查询

首先在sql表中添加外键 (例如,将一名外国患者加入主席)

接下来,如果您重新生成模型,您可以看到自动添加的关系(或者您可以手动添加关系)

public function relations()
{

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

在椅子模型中,您将看到关系

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

单独定义关系允许您访问查询模型中的值$ model-> relationName,如果要在'where'条件中使用列,请在模型函数中使用以下查询

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

“with”关键字很重要,可以使用一系列关系列表来包含在查询中。查询条件将应用于所有包含的表。如果您不想查询另一个表中的字段并且只需要链接的输出数据,则可以跳过此处的“with”关键字。

您可以通过

联系分配给患者的椅子
foreach($patients as $patient)print_r($patient->chairs);

还有其他方法,例如讨论here

要更多地了解关系,请转到here