如何在模型中使用$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获取结果

10-08 14:07