如何使用模型中的$this->hasMany()
或$this->hasOne()
设置相关模型数据的过滤?
例如:
我有SomeData表,可以引用ModalA或ModelB。 在ModelA和ModelB中我有:
$this->hasMany(array('id', 'SomeData', 'foreign_key');
在ModelA中,我希望将所有SomeData放在SomeData.foreign_key = id and SomeData.model = "ModelA"
。
我可以很容易地得到它们:
$this->getRelated(
'SomeData',
array("model = :model:", 'bind' => array('model' => 'ModelA')
);
但是$modelA->SomeData
为ModelA和ModelB提供了SomeData。
我尝试在$this->hasMany()
添加条件,但没有运气。
答案 0 :(得分:0)
你可以这样做:
// get what question ids are in test
$ids_already_in_test = $this->getDI()
->get('modelsManager')->createBuilder()
->from('Model_QuestionToTest')
->columns(array('question_id'))
->andWhere('Model_QuestionToTest.test_id = :test_id:', array('test_id' =>
$search_options['not_in_test']))
->getQuery()
->execute();
// filter out these ids
$ids = array();
foreach ($ids_already_in_test as $id) {
$ids[] = (int) $id->question_id;
}
unset($ids_already_in_test);
if (count($ids))
$questions_query->notInWhere('Model_UserQuestion.id', $ids);
}
有两个步骤: 1)获得ID,你不需要或不需要的东西 2)从主查询中使用“notInWhere”或“inWhere”设置的ID中获取结果