Phalcon中有条件的相关模型

时间:2013-08-01 03:48:41

标签: orm model phalcon

如何使用模型中的$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()添加条件,但没有运气。

1 个答案:

答案 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中获取结果