0

私は次の表を持っています

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問題は呼び出されるたびに、単一のパラメーターで呼び出されます。ユーザーまたはグループ。しかし、組み合わせがデータベースに既に存在するかどうかを判断するには、両方が必要です。

現在のモデルのフィールドの値を取得するにはどうすればよいですか?

4

2 に答える 2

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
}
于 2013-09-14T08:39:22.787 に答える
-1

テーブルの列に快適な名前を​​付けていません。それらに名前を付けるusergroup、関係もuserありgroup、2つの間にあいまいさが生じます。

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_idorを使用できます$this->group_id

于 2013-09-15T08:09:29.867 に答える