2013-10-03 53 views
1

我有以下SQLCdbcriteria加入 - 列未找到

SELECT entry_subject.id, entry_subject.subject_id FROM entry_subject INNER JOIN subject ON entry_subject.subject_id = subject.id WHERE subject.id = 71

我已經到達了它是一個數字的例子幾乎翻版以下,但是我得到1054未知列'字段列表'中的'EntrySubject.subject_id'。

$subjectEntries = new CDbCriteria(); 
$subjectEntries->alias = 'EntrySubject'; 
$subjectEntries->select = 'EntrySubject.id, EntrySubject.subject_id'; 
$subjectEntries->join = 'INNER JOIN Subject ON Subject.id = EntrySubject.subject_id'; 
$subjectEntries->condition = 'Subject.id=71'; 
$subjectEntriesModel=Subject::model()->findAll($subjectEntries); 

我的關係如下

return array(
'entrySubject' => array(self::HAS_MANY, 'EntrySubject', 'subject_id'), 
'phase' => array(self::BELONGS_TO, 'Phase', 'phase_id'), 
'subjectType' => array(self::BELONGS_TO, 'SubjectType', 'subject_type'), 
); 

我在做什麼錯? 非常感謝

+0

,您在一個「主題」模式選擇「EntrySubject.id,EntrySubject.subject_id」 ... –

回答

1

我假設你正在試圖獲得受#71主題條目,那麼你應該簡單地嘗試以下方法:

$subject = Subject::model()->findByPk(71); 
$subjectEntriesModel = $subject->entrySubject; 

編輯:你應該平時,避免預先加載(如描述miog布爾汗切廷答案)爲HAS_MANY關係

+0

謝謝大家對你的意見 - 我真的很感激 – giles

0

從燒酒的回答以上

我假設你正在試圖獲得主題條目主題#71,然後 你應該簡單地嘗試以下方法:

$subject = Subject::model()->findByPk(71); 
$subjectEntriesModel = $subject->entrySubject; 

我建議的除了這一點。

$subject = Subject::model()->with('entrySubject')->findByPk(71); 
$subjectEntriesModel = $subject->entrySubject; 

- 與( 'entrySubject')加入

這將允許YII使用一個查詢,而不是如果可能的話>。

+0

預先加載了HAS_MANY關係,通常情況下,效率不高。 – soju

0
$query = Subject::model()->with('entrySubject')->findbypk($id);