2

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

    $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);

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

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

4

1 回答 1

1

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

首先在你的 sql 表中添加外键(例如在椅子上添加外键 patientId)

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

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);

还有其他方法,就像这里讨论的一样

要与关系取得更多联系,请转到此处

于 2013-01-04T12:38:45.287 回答