Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 28 апр 2024, 01:20

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: count функция roles_users
СообщениеДобавлено: 29 июн 2013, 15:05 
Не в сети
Бывалый

Зарегистрирован: 14 июн 2013, 17:19
Сообщения: 82
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, при том что он не залогинен сам(естественно как он это сделает).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: count функция roles_users
СообщениеДобавлено: 29 июн 2013, 15:14 
Не в сети
Бывалый

Зарегистрирован: 14 июн 2013, 17:19
Сообщения: 82
Может нужно делать выборку через Join в связке с users? А то я совсем запутался, т.к. у таблицы нет уникального "id".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: count функция roles_users
СообщениеДобавлено: 29 июн 2013, 18:12 
Не в сети
Зеленый

Зарегистрирован: 13 июн 2013, 18:03
Сообщения: 4
Если через 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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: count функция roles_users
СообщениеДобавлено: 29 июн 2013, 18:24 
Не в сети
Бывалый

Зарегистрирован: 14 июн 2013, 17:19
Сообщения: 82
Дак да... По моему это единственное решение связывать или таким способом или напрямую чрез sql join. Просто я ломаю голову как это сделать напрямую обращаясь к roles_users, зная user_id.

Спасибо всё равно...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: count функция roles_users
СообщениеДобавлено: 29 июн 2013, 20:07 
Не в сети
Бывалый

Зарегистрирован: 14 июн 2013, 17:19
Сообщения: 82
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.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: count функция roles_users
СообщениеДобавлено: 29 июн 2013, 21:51 
Не в сети
Бывалый

Зарегистрирован: 14 июн 2013, 17:19
Сообщения: 82
И всё же скажите почему если через 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 Коханы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: count функция roles_users
СообщениеДобавлено: 29 июн 2013, 23:44 
Не в сети
Бывалый

Зарегистрирован: 14 июн 2013, 17:19
Сообщения: 82
Я так понимаю, что косяк возникает от этого:

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
Я понимаю это триггер, который по идее должен запускаться при удалении роли или пользователя.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: count функция roles_users
СообщениеДобавлено: 30 июн 2013, 00:05 
Не в сети
Бывалый

Зарегистрирован: 14 июн 2013, 17:19
Сообщения: 82
всё понял причину... Оказывается это прежний запрос каким-то чудным образом попадает в фабрику. Это на самом деле интересно почему-так произошло.

Но такая ошибка убила у меня много часов но поиски ошибки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: count функция roles_users
СообщениеДобавлено: 30 июн 2013, 20:19 
Не в сети
Зеленый

Зарегистрирован: 13 июн 2013, 18:03
Сообщения: 4
кста, что бы вытащить у конкретного пользователя его роли используй вот это:
$roli=ORM::factory('roli')->where('user_id', '=', $user->id)->find_all();
foreach ($roli as $value) {
$role[] = $value->role_id;
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: count функция roles_users
СообщениеДобавлено: 30 июн 2013, 20:54 
Не в сети
Зеленый

Зарегистрирован: 13 июн 2013, 18:03
Сообщения: 4
а по нормальному так
$user->roles->find_all()


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 75


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group