Kohana 3.2验证复合主键

时间:2013-09-14 07:57:45

标签: php mysql orm kohana kohana-3.2

我有下表

create table `groupusers`(
 `id` int not null auto_increment,
 `user` varchar(100) not null,
 `group` varchar(100) not null,
 UNIQUE KEY(`id`),
 PRIMARY KEY(`user`, `group`)
)

我的模型看起来像这样,

class Model_Groupuser extends ORM{
    protected $_table_name = 'groupusers';

    public function rules(){
        return array(
                'user' => array(
                        array('not_empty'),
                        array(array($this, 'user_group_not_exists')),
                ),
                'group' => array(
                        array('not_empty'),
                        array(array($this, 'user_group_not_exists')),
                )
        );
    }

    public function user_group_not_exists($param){
        // Need to get other field's value here.
    }
}

问题是每次调用user_group_not_exists时,都会使用单个参数调用它。用户或组。但我需要两者来确定数据库中是否存在组合。

如何获取当前模型的字段值?

2 个答案:

答案 0 :(得分:0)

您可以使用$this->object()函数获取其他字段值。

public function user_group_not_exists($user_or_group){
    $obj = $this->object();
    $group = $obj['group'];
    $user = $obj['user'];

    // Check if ($group, $user) pair exists in db here
}

答案 1 :(得分:-1)

您还没有真正命名您的表格列。将它们命名为usergroup,关系usergroup会在两者之间产生歧义。

正如kohana所做的那样伟大的事情,你可以访问表字段,关系等,就好像它是一个对象属性。 $i_am_lazy = $object-><field,relation,whatever>。现在你将你的领域和关系命名为不清楚你想要得到什么。

现在你可以访问这些id的唯一方法就像下面的那样(或者通过$this->object()的难度,如另一个答案所述,两者都感觉不好):

$user  = $this->user->id;
$group = $this->group->id;

但是,我建议只重命名表格列。

create table `groupusers`(
    `id` int not null auto_increment,
    `user_id` varchar(100) not null,
    `group_id` varchar(100) not null,
    UNIQUE KEY(`id`),
    PRIMARY KEY(`user`, `group`)
)

这样您只需使用$this->user_id$this->group_id