我有兩個模型。批次和主題。它們之間的關係是批量HAS_MANY主題。問題是三個主題都必須和所有批次。我怎樣才能在模型中實現這個固定值(三個主題)?Yii HAS_MANY與一些固定值
0
A
回答
1
如果你真的不想存儲在數據庫中的3個默認主題,你可以寫一個返回的默認主題與實際涉及到批處理對象的任何學科相結合的功能。
假設你的關係稱爲「主體」:
class Batch extends CActiveRecord
{
...
public function getAllSubjects()
{
$subject1 = new Subject;
...
$subject2 = new Subject;
...
$subject3 = new Subject;
...
return array($subject1, $subject2, $subject3) + $this->subjects;
}
的限制是不能引用默認主題數據庫的標準,你必須確保使用的$model->allSubjects
代替$model->subjects
0
使用自定義驗證器。這應該工作,雖然它沒有經過測試。
class RelatedObjAttrRangeValidator extends CValidator {
public $relationName;
public $relatedObjectAttributeName;
public $relatedObjectValues = array();
public function validateAttribute($object, $attribute) {
if(!$this->relationName) {
$this->relationName = $attribute;
}
if(!$this->relatedObjectAttributeName || !count($this->relatedObjectValues)) {
throw new CException("Misconfigured Validator!");
}
$relatedObjects = $object->getRelated($this->relationName);
if(is_array($relatedObjects)) {
$unmatched = array_values($this->relatedObjectValues);
$attr = $this->relatedObjectAttributeName;
foreach($relatedObjects as $relObj) {
$val = $relObj->$attr;
$idx = array_search($val, $unmatched);
if($idx !== -1) {
unset($unmatched[$idx]);
}
if(!count($unmatched)) {
break;
}
}
if(count($unmatched)) {
$object->addError($attribute, $this->message);
}
} else {
throw new CException(Yii::t('error', 'Relation {rel} in model {model} is not an array!', array(
'{rel}' => $this->relationName,
'{model}' => get_class($model),
));
}
}
}
class Batch extends CActiveRecord {
public function rules() {
return array(
array('subjects', 'RelatedObjAttrRangeValidator',
'relatedObjectAttributeName' => 'ID',
'relatedObjectValues' => array("required_id_1", "required_id_2", "required_id_3"),
'message' => "One or more required Subjects are missing",
);
}
}
相關問題
- 1. Yii has_many與兩個主鍵的關係
- 2. Yii框架:分頁與HAS_MANY,BELONGS_TO
- 3. 比較NSNumber與固定值?
- 4. Yii按關係排列HAS_MANY
- 5. 無效的yii關係HAS_MANY
- 6. Yii:限制HAS_MANY關係
- 7. 如何呈現表與一些固定的和一些動態列
- 8. YII框架:zii.widgets.jui.cjuidialog固定位置
- 9. 炒PHP代碼需要一些固定
- 10. 查找/替換數字本身減去一些固定值
- 11. 固定值lambda
- 12. 你如何設置YII Bootstrap只有一個固定大小?
- 13. 創建與具有固定值
- 14. 多jQuery的滑塊與固定值
- 15. SQL固定值IN()與INNER JOIN性能
- 16. 正則表達式與固定值
- 17. 添加與固定列值的關係
- 18. JQuery的滑塊與固定最小值
- 19. 如何將滑塊步進值設置爲某些固定值?
- 20. 終端與另一個後每行+一些固定的文本以及
- 21. 甲骨文)插入與一個固定值的多個行
- 22. 固定與絕對
- 23. 組固定軸值
- 24. 與第一列固定寬度
- 25. 與第一個固定行的Html表
- 26. Yii的順序用的has_many關係的另一個表
- 27. 固定值一直保持加起來
- 28. 如何選擇一個固定值
- 29. 增加一個固定值的指針
- 30. 休眠一對多映射固定值
這不是我想要的,我想問題與我的問題。假設我有一個$ batchModel。那麼$ batchModel->科目必須包含三個預先配置的科目+與數據庫中的批次相關的科目。即使數據庫中沒有批次的主題,它的主題屬性也必須包含三個子目錄。希望你得到了我的問題,並對我的英語不好 – dInGd0nG 2012-04-28 14:01:07
是的,這個驗證器可以確保包含那些特定的主題,但它不會自動包含它們 - 這不是驗證者的工作。您可以使用模型的'afterSave()'函數檢查幷包含其他主題(如果它們丟失)。 – DCoder 2012-04-28 14:08:48
ok.thanks。這是一個很好的解決方案。我想知道這三個主題沒有存儲在數據庫中,並且它們在應用程序中是硬編碼的。 (這樣我可以刪除多餘的數據庫條目,因爲這些主題對於所有批次都是通用的和相同的) – dInGd0nG 2012-04-28 14:17:46