如何在模型中使用$this->hasMany()
或$this->hasOne()
对相关模型数据进行过滤?
例如:
我有可以引用到ModalA或ModelB的SomeData表。
在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()
中添加条件,但是没有任何运气。 最佳答案
您可以这样操作:
// 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);
}
有2个步骤:
1)获取ID,您不需要或需要的内容
2)从在主查询中用“notInWhere”或“inWhere”设置的此ID获取结果