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

Код:
<?php defined('SYSPATH') or die('No direct script access.');
 
class Model_Userroles extends Model {

 protected $_roles_users = 'roles_users';
 
 public function selectlogin($id = '1') {
 
   $sql = 'SELECT `role_id` FROM `'.$this->_roles_users.'` WHERE `user_id` = :userid ORDER BY `roles_users`.`user_id` ASC';
   $query = DB::query(Database::SELECT, $sql);
   $query->param(':userid', $id);
   
   return $query->execute()->get('role_id');
 }
 
}


этой моделью из БД(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() пропустить мне возвращает:
Код:
 $usersmodel=ORM::factory('role', 1)
   ->users
   ->find();
   
   $this->response->body(var_dump($usersmodel->id));


Результат:
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/