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

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

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




Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: вопрос по ORM
СообщениеДобавлено: 08 авг 2012, 11:25 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
Ну да, этот запрос не поможет
Код:
$users = ORM::factory('user')
   ->join('roles_users')
   ->on('user.id','=','roles_users.user_id')
   ->where('roles_users.role_id','!=',2)
   ->find_all();

_________________
http://de-en.info (работает на Kohana 3.3)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по ORM
СообщениеДобавлено: 08 авг 2012, 22:57 
Не в сети
Бывалый

Зарегистрирован: 06 авг 2012, 22:39
Сообщения: 91
модели же получаются связанные. если делать запрос с with()
пример:
Код:
$data = ORM::factory('user')->with('role')->where('role','<>','admin')->find_all();

что-то вроде этого. в таких запросах where относится только к user, или к role тоже


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по ORM
СообщениеДобавлено: 08 авг 2012, 23:06 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
Нужно пробовать, но думаю, чтобы использовать with нужно описать связь не через through
with строит тоже join

_________________
http://de-en.info (работает на Kohana 3.3)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по ORM
СообщениеДобавлено: 09 авг 2012, 10:08 
Не в сети
Бывалый

Зарегистрирован: 06 авг 2012, 22:39
Сообщения: 91
нет, не обязательно. through нужно использовать для связи много ко многим, когда нужна связующая табличка. а один ко многим юзает просто фореин кей. with будет работать, но неизвестно или будет работать where для with


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по ORM
СообщениеДобавлено: 09 авг 2012, 11:59 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
А что вам дает ->where('role','<>','admin')?
У админа все равно есть роль login

_________________
http://de-en.info (работает на Kohana 3.3)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по ORM
СообщениеДобавлено: 09 авг 2012, 13:18 
Не в сети
Бывалый

Зарегистрирован: 16 апр 2012, 19:44
Сообщения: 113
where будет относиться толmrj к инициализируемой модели, т.е. к with модели относится не будет.

и да where('role','<>','admin') работать не будет так, как это просто выберет всех строки в которых не присутствует admin, но пользователь с правами admin имеет строку с правами login.
Необходимо еще как-то выкинуть пользователей, которые имеют права admin, из результатов пользователей с правами login.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по ORM
СообщениеДобавлено: 09 авг 2012, 13:52 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
Да этот вариант самый нормальный
Код:
    $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();
 
Оформить его методом в модели и все. Потом вызывать типа ORM::factory('user')->get_only_user();
Думаю если наворотить одним запросом, то он будет намного сложнее и не факт, что не будет вложенного.
И не так наверное часто нужен список только из пользователей, без других ролей.
Админ тоже пользователь, зачем его обижать и выкидывать со списка)))
На крайний случай, если нужно распределение по ролям и все сложно, нужно искать соответствующий модуль Kohana ACL или подключить Zend ACL и работать.
Элегантного решения, как вам хотелось наверное нет)

_________________
http://de-en.info (работает на Kohana 3.3)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по ORM
СообщениеДобавлено: 09 авг 2012, 15:36 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
AmberLEX писал(а):
Да этот вариант самый нормальный
Код:
    $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();
 


А прикольно получается :)
Я использовал такой код, для получения пола (муж/жен) в котролёре:
Код:
$gender = $this->request->param('gender');
$sex = ORM::factory('sex')->get_by_name($gender);

Ну и ещё мне нужно было в модели написать следующее:
Код:
  public function get_by_name($gender)
  {
    $this->where($this->_object_name.'.name', '=', $gender);
    return parent::find();
  }

Оказалось можно выкинуть из модели этот метод, а в котролёре написать:
Код:
$sex = ORM::factory('sex', array('name' => $gender));

Вот она, вся сила ORM :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу Пред.  1, 2

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


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

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


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

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