3

如何使用$this->hasMany()$this->hasOne()在模型中设置对相关模型数据的过滤?

例如:

我有可以引用到 ModalA 或 ModelB 的 SomeData 表。在 ModelA 和 ModelB 我有:

$this->hasMany(array('id', 'SomeData', 'foreign_key');

在 ModelA 中,我想获取所有 SomeData where SomeData.foreign_key = id and SomeData.model = "ModelA".

我可以通过以下方式轻松获得它们:

$this->getRelated(
    'SomeData',
     array("model = :model:", 'bind' => array('model' => 'ModelA')
);

$modelA->SomeData给了我 ModelA 和 ModelB 的一些数据。

我试过添加条件,$this->hasMany()但没有任何运气。

4

1 回答 1

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);
    }

有 2 个步骤:1) 获取 id,你不需要或确实需要的 2) 从此 id 中获取结果,在主查询中设置为“notInWhere”或“inWhere”

于 2014-02-02T07:02:37.283 回答