2013-09-14 9 views
0

я ниже таблицу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 называется, его вызывается с одним параметром. Любой пользователь или группа. Но мне нужно и то, и другое, чтобы определить, существует ли комбинация в db.

Как я могу получить значение полей текущей модели?

ответ

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 
} 
+0

Невозможно передать оба значения в качестве параметров? Оценщики – kero

+0

проверяют только одно поле. –

-1

Вы на самом деле не назвали ваши колонны таблицы удобными. Назвав их user и group, а также отношения user и group создают двусмысленность между ними.

Как kohana делает эту замечательную вещь, где вы можете получить доступ к полям таблиц, отношениям и т. Д., Как будто это свойство объектов. $i_am_lazy = $object-><field,relation,whatever>. Теперь вы назвали свои поля и отношения такими, что не ясно, что вы пытаетесь получить.

Единственный путь вы можете получить доступ к этим идентификаторов теперь как следующее (или трудный путь через $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.

+0

Не соблюдение соглашения об именах не является проблемой. Вы можете определить имя столбца и таблицы в модели, которая переопределяет соглашение. –

+0

Конечно, вы можете, но с такими вещами вы только усложняете себя. Зачем использовать '$ this-> object()' ВСЕГДА, когда вы можете просто переименовать свои столбцы ОДИН РАЗ. – AmazingDreams

+0

Проблема здесь не связана с соглашением об именах коханов ORM. В первоначальном проекте я использовал конвенцию. Я показываю здесь пример. И здесь нет никакого отношения. Просто простая ЕДИНАЯ таблица. –

Смежные вопросы