Фильтрация результатов с помощью codeigniter и datamapper - PullRequest
0 голосов
/ 02 ноября 2011

У меня небольшая проблема с datamapper, и я хотел бы знать, есть ли быстрое решение.Допустим, у меня есть данные такого типа

Таблица групп

id   |   Name
1    |   admin
2    |   guest
3    |   editor
4    |   moderator

В моем базовом контроллере я установил глобальное поле, чтобы видеть только группы, которые не являются администраторами

$this->groups_ = new Group();
$this->groups_->where('id >', 1)->get();

//so I can select the users that are not admin
$users = new User();
$users->where_related('group',$id,$this->groups_)->get();

Теперь в моих контроллерах я бы хотел отфильтровать группы.Например, я хочу выбрать только редакторов и гостей (идентификатор от 1 до 4).Поэтому я хотел бы отфильтровать начальный набор результатов ... что-то вроде этого

$this->groups_->where('id <',4)->get();

Но это не работает.Возвращает ВСЕ идентификаторы группы <4, включая admin.Каков был бы правильный способ получить это? </p>

Ответы [ 2 ]

0 голосов
/ 08 ноября 2011

Возможное решение

Возможно, я нашел возможный обходной путь путем клонирования объекта datamapper .То, что я хочу сделать, это не запрашивать базу данных несколько раз, но я хотел бы иметь базовый набор результатов и уточнить результаты.

Так что в моем базовом контроллере я бы сделал что-то вроде

$this->groups_ = new Group();
$this->groups_->where('id >', 1);//without getting the results

//so I can select the users that are not admin
$users = new User();
//here i'm getting the results from the clone
$users->where_related('group',$id,$this->groups_->get_clone()->get())->get();

И, так как я оставил объект «открытым», не получая результатов, я могу использовать его в своих контроллерах, как основу для других моих «запросов» ... ладно, это фактически новые условия первогозапрос.

//now the query return the groups between 2, as I set in the base controller
//and 4, set in the child controller
$this->groups_->where('id <',4)->get();
0 голосов
/ 02 ноября 2011

Ну, datamapper не запрашивает объекты или группы объектов.Запрашивает базу данных.Поэтому, когда вы делаете второй get(), вы выполняете отдельный запрос к базе данных.

Вы можете сделать это, но это будет дополнительный запрос:

$this->groups_->where('id >', 1)->where('id <', 4)->get();

илиВы можете просмотреть $this->groups_ после первого запроса в php, отфильтровать набор и сохранить в виде массива.

...