2014-12-27 65 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