2014-12-27 57 views
0

表在MySQL:Yii的关系 - 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'), 
); 

关系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; 
     } 

,但它并没有在现场表只选择记录工作。

为什么?

+0

“feild_id”的一致拼写错误(或非正统拼写)不同寻常 - 它可能会更好,因为'field_id'。 – 2014-12-28 05:33:37

回答

0

这样你就不会achive你找什么,

当你使用抓取您的with记录将取回相关记录,这意味着:eager loadinglazy,但是当你的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); 
+0

非常非常非常非常感谢你 – 2014-12-28 06:44:17