2011-01-29 34 views
2

我正在開發一個個人項目。CakePHP bindModel工作,預設模型關聯不是

我有兩個模型'顯示'和'插曲'。我有一個控制器'Ops'。

顯示模式:

class Show extends AppModel 
{ 
var $name = 'Show'; 

var $hasMany = array(
    'Episode' => array(
    'className' => 'Episode', 
    'foreignKey' => 'show_id' 
) 
); 
} 

情節模式:

class Episode extends AppModel 
{ 
var $name = 'Episode'; 

var $belongsTo = array(
    'Show' => array(
    'className' => 'Show', 
    'foreignKey' => 'show_id' 
) 
); 
} 

行動控制器:

class OpsController extends AppController 
{ 
var $name = 'Ops'; 
var $uses = array('Show','Episode'); 

function index() 
{ 
    $episodes = $this->Episode->find('all',array(
    'limit' => 10, 
    'order' => array('Episode.first_aired' => 'DESC'), 
    ) 
); 
    debug($this->Episode); 
    debug($episodes); 

} 
} 

當運行行動控制器我得到了 '情節' 的記錄,像我想要的,但請勿根據'belongsTo'配置中的'show_id'獲取關聯的'Show'記錄。看起來它並沒有引用模型,因爲我可以故意破壞模型類,而請求仍在繼續。

做了很多檢查,從事研究和測試後,我能得到它由find()請求之前添加以下到行動控制器開始工作:

$this->Episode = ClassRegistry::init('Episode'); 
$this->Episode->bindModel(
array('belongsTo' => array(
    'Show' => array(
    'className' => 'Show' 
    ) 
) 
) 
); 

趁現在這個作品我仍然想知道爲什麼我的模型沒有被正確調用。非常感激任何的幫助。謝謝!

回答

0

,如果你以同樣的方式查詢顯示會發生什麼?

你一定的id字段正確定義?

兩個表,你應該有id(INTsize)和發作也應該有show_id(INTsize)。

如果它是根據蛋糕慣例設置,你應該能夠去除'foreignKey' => 'show_id'線和蛋糕將整理出來itself.`

+0

是的,我已經仔細檢查了字段類型並正確設置。我也嘗試過使用'foreignKey'設置,但沒有使用相同的結果。我正在處理的主要問題是使用$ uses變量時未包含模型類。我故意將錯誤放入我的模型中,並且「使用」它們的控制器不會報錯。 – 2011-01-30 17:56:13

0

這聽起來像蛋糕是不使用你的模型文件,而是自動地生成一些基於表格。 聽起來很愚蠢,但檢查拼寫錯誤的文件夾和文件名稱,並且它們是小寫字母。

0

在你的節目模式,你有情節外鍵設置爲show_id,應episode_id。但是,我不認爲這是造成問題。

你沒有改變任何CakePHP的命名規則,從我所知道的,所以才刪除該定義的關聯數組,並留下字符串,例如

class Show extends AppModel 
{ 
var $name = 'Show'; 

var $hasMany = array(
    'Episode' 
); 
} 

class Episode extends AppModel 
{ 
var $name = 'Episode'; 

var $belongsTo = array(
    'Show' 
); 
} 

這可能無法正常工作,但之前我遇到過類似的問題,並且解決了這個問題。祝你好運。