Yii关系 - MySQL外键

时间:2014-12-27 13:31:11

标签: mysql yii relation

MySQL中的表:

字段:

id pk

field_option

id pk

feild_id int(11)    

ALTER TABLE  `field_option` ADD CONSTRAINT  `option_field` FOREIGN KEY (  `feild_id` ) REFERENCES  `agahi_fixed`.`field` (
`id`
) ON DELETE CASCADE ON UPDATE RESTRICT;

关系字段模型:

return array(
  'fieldOption' => array(self::HAS_MANY, 'FieldOption', 'feild_id'),
);

Relation FieldOption模型:

return array(
    'feild' => array(self::BELONGS_TO, 'Field', 'feild_id'),
);

在控制器中:

if(Field::model()->exists('cat_id = :catId', array(":catId"=>$_POST['catid']))){
            $criteria=new CDbCriteria;
            //$criteria->select='*';  
            $criteria->condition='cat_id=:catId';
            $criteria->params=array(':catId'=>$_POST['catid']);
            $criteria->with = 'fieldOption';
            $field=Field::model()->findAll($criteria);
            header('Content-type: application /json');
            $jsonRows=CJSON::encode($field);
            echo $jsonRows;
        }

但它不适用于只在字段表中选择记录。

为什么?

1 个答案:

答案 0 :(得分:0)

这样你就不会得到你想要的东西,

当您使用with获取记录时,它将获取相关记录,这意味着:eager loading而非lazy,但是当您对模型进行json编码时,它将获取主模型的属性,而不是任何关系,如果您希望任何相关数据被模型编码,您必须明确说出来。我建议制作一个空数组:

$result = array();

对模型进行循环并附加到此结果,从模型到相关模型

foreach($field as $model)
{
  $record = $model->attributes; // get main model attributes
  foreach($model->fieldOption as $relation)
     $record['fieldOption'][] = $relation->attributes; // any related records, must be explicitly declared

  $result[] = $record;
}

现在你有你需要的东西,然后回复它

 echo CJSON::encode($result);