Phalcon模型与其他条件有很多关系

时间:2015-04-14 15:40:00

标签: model phalcon

是否可以选择向Phalcon向导功能hasManyToMany添加其他条件?我已经检查了phalcon docs但是他们没有列出hasManyToMany的所有可能选项(仅列出了别名和foreginKey)。 如果无法使用hasManyToMany,则可以使用任何其他Phalcon选项 - 例如。检索所有然后过滤一些模型加载事件?

简单示例: 我有3个表组,关系和用户,并希望使用Relation表在用户模型中创建两个属性 - active_groups和inactive_groups。

代码:

class GroupModel extends Model {
    public $id;    
    public $name;
}

class RelationModel extends Model {
    public $id;    
    public $related_id_one;
    public $related_id_two;
    public $active;
}

class UserModel extends Model {

    public function initialize() {

        $this->hasManyToMany(
            "id",
            "RelationModel",
            "related_id_one",
            "related_id_two",
            "GroupModel",
            "id",
            array(  'alias' => 'active_groups', 
                    'conditions' => 'RelationModel.active = true')
        );

        $this->hasManyToMany(
            "id",
            "RelationModel",
            "related_id_one",
            "related_id_two",
            "GroupModel",
            "id",
            array(  'alias' => 'inactive_groups', 
                    'conditions' => 'RelationModel.active = false')
        );
    }
}

TNX!

1 个答案:

答案 0 :(得分:2)

你可以这样做。 BTW并不完全确定这段代码是否正常运行,但你希望这个想法得到了解。

我不知道phalcon是否有条件/ where选项

class GroupModel extends Model {
    public $id;    
    public $name;
}

class RelationModel extends Model {
    public $id;    
    public $related_id_one;
    public $related_id_two;
    public $active;
}

class UserModel extends Model {

    public function initialize() {

        $this->hasManyToMany(
            "id",
            "RelationModel",
            "related_id_one",
            "related_id_two",
            "GroupModel",
            "id",
            array(  'alias' => 'groups')
        );

    }

    public function getActiveGroups() {
      return $this->getGroups('RelationModel.active = true');
    }

    public function getInactiveGroups() {
      return $this->getGroups('RelationModel.inactive = false');
    }
}