一個參數傳遞給關聯查詢我有一個MANY_MANY關係:如何在Yii中
'rel'=>array(self::MANY_MANY, 'MyClass','table(id_1,id_2)',
'condition'=>'some condiotions AND field_name=:param')
我得到MYCLASS的結果-instances在siteController:
$obj->rel
是否有可能(和如何)將param從控制器傳遞給關係的查詢?
一個參數傳遞給關聯查詢我有一個MANY_MANY關係:如何在Yii中
'rel'=>array(self::MANY_MANY, 'MyClass','table(id_1,id_2)',
'condition'=>'some condiotions AND field_name=:param')
我得到MYCLASS的結果-instances在siteController:
$obj->rel
是否有可能(和如何)將param從控制器傳遞給關係的查詢?
我很確定這是不可能的,但是你想要做的事情可以用不同的方式實現。
檢查從the Guide如下:
我們可以同時在與()使用動態關係查詢選項和與選項。動態選項將覆蓋如關係()方法中指定的現有選項。 ...
所以,你的查詢可以是這樣的(如果我們要使用預先加載的方法):
$param='something';
$obj=SomeModel::model()->with(array(
'rel'=>array('condition'=>'some conditions AND field_name=:param',
'params' => array(':param' => $param))
))->findAll();
// some more code
$obj->rel->attributeOne;
或者使用延遲加載方法時,進行關聯查詢:
$param='something';
$obj=SomeModel::model()->findByPk(1);
$rels=$obj->rel(array('condition'=>'some conditions AND field_name=:param',
'params' => array(':param' => $param)
));
希望這會有所幫助。請閱讀鏈接指南。如有需要,請求澄清。
編輯:在下面的評論中已經提到
作爲,some conditions
可以放在模特的關係,只有附加條件需要在查詢中指定。附加條件自動被AND
'修改爲模型的關係條件。這似乎與文檔相反。但無論如何,下面的代碼可用於:
// In the model's relation:
'rel'=>array(self::MANY_MANY, 'MyClass','table(id_1,id_2)',
'condition'=>'some conditions');
控制器:
$param='something';
$obj=SomeModel::model()->with(array(
'rel'=>array('condition'=>'field_name=:param',
'params' => array(':param' => $param))
))->findAll();
另見this comment鏈接的文檔
你可以試試 「參數命名範圍」 中:
function relations() {
return array(
'rel'=>array(self::MANY_MANY, 'MyClass','table(id_1,id_2)',
'condition'=>'some conditions')
)
}
public function relByFieldName($fieldValue=5)
{
$this->getDbCriteria()->mergeWith(array(
'with' => 'rel',
'condition' => 'field_name = :value',
'params' => array(':value' => $fieldValue)
));
return $this;
}
然後你可以這樣使用它:
$models=Model::model()->relByFieldName(100)->findAll();
+1,很好的解決方案。 – 2012-02-22 15:36:38
我雖然這樣,在我看來,一個很好的方法來解決這個問題。另一方面,我將永遠不得不重複靜態的「一些條件」,它看起來很醜( – lvil 2012-02-22 15:00:55
好,目前我不能想到一個解決方法,但總是在編程時考慮權衡。醜陋vs whats possible。:) – 2012-02-22 15:22:25
看看@ mashingan的解決方案,它看起來不錯。我的錯誤是 – 2012-02-22 15:35:55