Русскоязычный форум, посвященный фреймворку Kohana http://forum.kohanaframework.su/ |
|
count функция roles_users http://forum.kohanaframework.su/viewtopic.php?f=31&t=694 |
Страница 1 из 1 |
Автор: | arhont [ 29 июн 2013, 15:05 ] |
Заголовок сообщения: | count функция roles_users |
2 дня бьюсь с запросом не понимаю, что я делаю не так... Написал модель: Код:
этой моделью из БД(roles_users): user_id role_id 1 | 1 1 | 2 С какого то перепугу получаю 9 А phpMyAdmin всё верно выводит на запрос: SELECT `role_id` FROM `roles_users` WHERE `user_id` = '1' ORDER BY `roles_users`.`user_id` ASC получается 2 столбца, соответственно с ролью логин и админ. Задача стоит простая - узнать есть ли у пользователя привилегия Login, при том что он не залогинен сам(естественно как он это сделает). |
Автор: | arhont [ 29 июн 2013, 15:14 ] |
Заголовок сообщения: | Re: count функция roles_users |
Может нужно делать выборку через Join в связке с users? А то я совсем запутался, т.к. у таблицы нет уникального "id". |
Автор: | gangreyw [ 29 июн 2013, 18:12 ] |
Заголовок сообщения: | Re: count функция roles_users |
Если через kahana авторизацию, то у пользователя всегда есть привилегия login А для того чтоб узнать роль пользователя используя ORM то можно добавить в Model_Role связь protected $_has_many = array( 'users' => array( 'model' => 'user', 'through' => 'roles_users' ) ); запрос к БД: $user=ORM::factory('role', 1) ->users ->find_all(); достанет всех пользователей с ролью login |
Автор: | arhont [ 29 июн 2013, 18:24 ] |
Заголовок сообщения: | Re: count функция roles_users |
Дак да... По моему это единственное решение связывать или таким способом или напрямую чрез sql join. Просто я ломаю голову как это сделать напрямую обращаясь к roles_users, зная user_id. Спасибо всё равно... |
Автор: | arhont [ 29 июн 2013, 20:07 ] |
Заголовок сообщения: | Re: count функция roles_users |
gangreyw писал(а): Если через kahana авторизацию, то у пользователя всегда есть привилегия login А для того чтоб узнать роль пользователя используя ORM то можно добавить в Model_Role связь protected $_has_many = array( 'users' => array( 'model' => 'user', 'through' => 'roles_users' ) ); запрос к БД: $user=ORM::factory('role', 1) ->users ->find_all(); достанет всех пользователей с ролью login Всё равно возвращает "9" как с помощью count_all() так и по другому - через find_all()... Я уже начинаю думать, что с таблицей что-то не так. Любой запрос возвращает 9. |
Автор: | arhont [ 29 июн 2013, 21:51 ] |
Заголовок сообщения: | Re: count функция roles_users |
И всё же скажите почему если через find() пропустить мне возвращает: Код:
Результат: string(1) "1" 10 Правильный результат 1, но без var_dump возвращает только 10? Как к этому относится? Может строковыми функциями мне из var_dump выбивать правильный ответ? 10 а ранее 9 это максимальный id в таблице users от Auth Коханы. |
Автор: | arhont [ 29 июн 2013, 23:44 ] |
Заголовок сообщения: | Re: count функция roles_users |
Я так понимаю, что косяк возникает от этого: ALTER TABLE `roles_users` ADD CONSTRAINT `roles_users_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `roles_users_ibfk_2` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE; Который поставляется при создании системы авторизации auth-schema-mysql.sql Я понимаю это триггер, который по идее должен запускаться при удалении роли или пользователя. |
Автор: | arhont [ 30 июн 2013, 00:05 ] |
Заголовок сообщения: | Re: count функция roles_users |
всё понял причину... Оказывается это прежний запрос каким-то чудным образом попадает в фабрику. Это на самом деле интересно почему-так произошло. Но такая ошибка убила у меня много часов но поиски ошибки. |
Автор: | gangreyw [ 30 июн 2013, 20:19 ] |
Заголовок сообщения: | Re: count функция roles_users |
кста, что бы вытащить у конкретного пользователя его роли используй вот это: $roli=ORM::factory('roli')->where('user_id', '=', $user->id)->find_all(); foreach ($roli as $value) { $role[] = $value->role_id; } |
Автор: | gangreyw [ 30 июн 2013, 20:54 ] |
Заголовок сообщения: | Re: count функция roles_users |
а по нормальному так $user->roles->find_all() |
Страница 1 из 1 | Часовой пояс: UTC + 4 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |