Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

вопрос по ORM
http://forum.kohanaframework.su/viewtopic.php?f=33&t=292
Страница 1 из 2

Автор:  Rush64 [ 06 авг 2012, 22:45 ]
Заголовок сообщения:  вопрос по ORM

затупился сегодня. имеем стандартные модули ORM и auth

допустим, чтобы выбрать список админов, делаем примерно следующее:
Код:
$role = ORM::factory('role')->where('name','=','admin')->find_all();
$users = $role->users;


а вот как выбрать из бд ТОЛЬКО юзверей с ролью login, но без роли admin. а то получается админы имеют две роли, а юзвери одну

Автор:  Sergey [ 06 авг 2012, 23:30 ]
Заголовок сообщения:  Re: вопрос по ORM

Rush64 писал(а):
а то получается админы имеют две роли, а юзвери одну


А как это так у вас получается?

Автор:  mamahtehok [ 07 авг 2012, 00:37 ]
Заголовок сообщения:  Re: вопрос по ORM

to Sergey: в стандартном auth для любого зарегистрированного пользователя назначается роль login, admin это дополнительная роль, таких ролей может быть несколько, но для входа login обязательна.

to Rush64:
Код:
$role = ORM::factory('role')->where('name','=','login')->where('name','!=','admin')->find_all();
$users = $role->users;

Как-то так...

Автор:  Rush64 [ 07 авг 2012, 00:44 ]
Заголовок сообщения:  Re: вопрос по ORM

как то так я пробовал, только вместо != юзал <> как в mysql)
завтра с утра попробую, отпишусь

Автор:  mamahtehok [ 07 авг 2012, 02:25 ]
Заголовок сообщения:  Re: вопрос по ORM

все же код будет посложнее
Код:
/*
 * код выберет всех пользователей у котрых нету роли админ
 *
 */
        $login = ORM::factory('role',array('name'=>'admin'))->users->find_all();
        foreach ($login as $user) {
            $ids[] = $user->id;
        }
        $users = ORM::factory('user')->where('id','NOT IN',$ids)->find_all()->as_array();


Автор:  Rush64 [ 07 авг 2012, 10:13 ]
Заголовок сообщения:  Re: вопрос по ORM

это конечно рабочий вариант, но уже не такой красивый. я думал есть элегантное решение)

Автор:  mamahtehok [ 07 авг 2012, 13:34 ]
Заголовок сообщения:  Re: вопрос по ORM

Ну можно конечно join'ами замутить как нибудь...

Автор:  Rush64 [ 07 авг 2012, 20:14 ]
Заголовок сообщения:  Re: вопрос по ORM

через DB::query имеешь ввиду? для меня просто в новинку InnoDB, я бы уже давно так сделал)

Автор:  mamahtehok [ 07 авг 2012, 20:45 ]
Заголовок сообщения:  Re: вопрос по ORM

пораметры DB::query можно использовать совместно с ORM. Т.е. полчится типа того
Код:
$users = ORM::factory('user')
 ->join('roles_users')
 ->on('user.id','=','roles_users.user_id')
 ->where('role','!=','2');

Но как мне такая запись (а на самом деле реально рабочая будет еще более грамоздкой) еще менее красива, чем тот код который я привел ранее )))

Автор:  Rush64 [ 07 авг 2012, 22:04 ]
Заголовок сообщения:  Re: вопрос по ORM

зато тут один запрос, а там два + foreach

Страница 1 из 2 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/