powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / ORM::выборка по фильтрам в Kohana 3.2.2?
10 сообщений из 10, страница 1 из 1
ORM::выборка по фильтрам в Kohana 3.2.2?
    #38146894
Фотография Stasonix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr.S

Eсть модель объекта, в нем есть метод, который ищет все объекты, по определенным фильтрам:


Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
class Model_Object extends ORM {

public function get_objects($filters = array())
{

        if (!empty($filters['Role']))
               $role = $filters['Role'];
          else
        $role = NULL;

        $objects = ORM::factory('object')
                           ->where('RoleId','=',$role)
                           ->find_all();

       return $objects;
}




Проблема в том что если этого фильтра не будет существовать (а фильтров как вы сами понимаете может быть несколько, а может и вовсе никаких), я имею в виду фильтр filters['Role'], то естественно ORM ни вернет никаких объектов, как сделать так чтобы если этого фильтра нет, то наоборот, возвращались все объекты?
...
Рейтинг: 0 / 0
ORM::выборка по фильтрам в Kohana 3.2.2?
    #38146985
rtgeryrt456
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stasonix,

немного странный вопрос, напишите просто иф в нужном месте

Код: php
1.
2.
3.
4.
5.
6.
$object = ORM::factory('object');
if ($role)
{
    $object->where('RoleId','=',$role);
}
return $object->find_all();
...
Рейтинг: 0 / 0
ORM::выборка по фильтрам в Kohana 3.2.2?
    #38147849
Фотография Stasonix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rtgeryrt456,

Да не все так просто, если бы было так то я бы и не спрашивал, но тут такое дело что фильтров может штук 20 быть, и моментами они могут быть беспорядочно фильтровать, т.е. половина фильтров есть, половина нету, представляете сколько тогда логики нужно внести?
...
Рейтинг: 0 / 0
ORM::выборка по фильтрам в Kohana 3.2.2?
    #38148654
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
$db = Database::instance();

$role_condition = '1';
$role_id = NULL;

if (array_key_exists('Role', $filters)) {
    $role_id = $filters['Role'];
}

if ($role_id) {
    $role_condition = "`objects`.`RoleId` = {$role_id}";
}

$mysql_query =
<<<heredoc
    SELECT *
    FROM   `objects`
    WHERE  {$role_condition}
heredoc;

$objects = $db->query($mysql_query);
...
Рейтинг: 0 / 0
ORM::выборка по фильтрам в Kohana 3.2.2?
    #38150131
Фотография Stasonix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Кто-то явно ни в курсе дела что такое Kohana и модуль ORM...
...
Рейтинг: 0 / 0
ORM::выборка по фильтрам в Kohana 3.2.2?
    #38150424
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stasonix,

Больше похоже на то, что кто-то не способен реализовать правильную логику приложения с помощью условных переходов, а уже ему подавай Kohan'у и ORM.
...
Рейтинг: 0 / 0
ORM::выборка по фильтрам в Kohana 3.2.2?
    #38150446
rtgeryrt456
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stasonixrtgeryrt456,

Да не все так просто, если бы было так то я бы и не спрашивал, но тут такое дело что фильтров может штук 20 быть, и моментами они могут быть беспорядочно фильтровать, т.е. половина фильтров есть, половина нету, представляете сколько тогда логики нужно внести?

думаю, что представляю :)
самое простое - валидируете фильтры чтобы не пробралось левое значение поля(которого нет) и в цикле набрасываете where
или вы ждете что есть волшебный метод во фреймворке?
...
Рейтинг: 0 / 0
ORM::выборка по фильтрам в Kohana 3.2.2?
    #38150875
Фотография Stasonix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rtgeryrt456,

нет, просто спрашиваю, собственно говоря не на одном форуме уже спросил, и толково вроде отвечают, даже некоторые свои классы предлагают, а да... до волшебного метода во фреймворке так и не дошло, вернее фреймворк не дошел. Да здравствуют прямые руки!

кстати о цикле - ( LIKE, IN, <>, = ), имхо, но тут не просто цикл надо, тут целый метод писать надо. Конечно странно что об этом в туториалах ничего не сказано, задача то сама по себе тривиальная, есть поиск по одному полю, есть по двум - трем, а там (в тех же туториалах) в основном поиск по одному полю ( если вообще кто-то видел такой туториал, я нет, так что могу только догадываться ), я не говорю что все видеоуроки плохие потому что там чего-то не хватает, просто, на будущее, а вдруг кто сделает ( может даже я, но я не профоан ).
...
Рейтинг: 0 / 0
ORM::выборка по фильтрам в Kohana 3.2.2?
    #38151265
sergkarpenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stasonixrtgeryrt456,

нет, просто спрашиваю, собственно говоря не на одном форуме уже спросил, и толково вроде отвечают, даже некоторые свои классы предлагают, а да... до волшебного метода во фреймворке так и не дошло, вернее фреймворк не дошел. Да здравствуют прямые руки!

кстати о цикле - ( LIKE, IN, <>, = ), имхо, но тут не просто цикл надо, тут целый метод писать надо. Конечно странно что об этом в туториалах ничего не сказано, задача то сама по себе тривиальная, есть поиск по одному полю, есть по двум - трем, а там (в тех же туториалах) в основном поиск по одному полю ( если вообще кто-то видел такой туториал, я нет, так что могу только догадываться ), я не говорю что все видеоуроки плохие потому что там чего-то не хватает, просто, на будущее, а вдруг кто сделает ( может даже я, но я не профоан ).

ИМХО это не задача ОРМ или фреймворка, это обычная логика и как правило она кастомная, насколько целесообразен реюз такого решения? простое решение проще написать под проект, универсальное же будет дорого в поддержке, ОРМ дает вам удобную возможность вместо доклейки строки вызывать метод и этого достаточно как по мне.

Выше я писал что цикл самое простое, но вы можете прописать массив с правилами
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
$this->filterOptions = [
  'rule' => ['condition' => '='],
  'rule2' => ['condition' => '>'],
];

foreach ($filters as $filterName => $filterValue)
{
  if (isset($this->filterOptions[$filterName]))
  {
    $object->where($filterName, $this->filterOptions[$filterName],$filterValue);
  }
}


можете написать \ORM\Filter\Builder в который скармливать параметры фильтров, а на выходе получать нужный датасет.
можете засунуть это в какой нибудь конфигурационный файл и там управлять этим.
можете скрестить это с описанием полей в модели или усложнить описание валидации и тп
Многое в конечном итоге зависит от постановки задачи

И 20 значений в фильтре - это не много.
...
Рейтинг: 0 / 0
ORM::выборка по фильтрам в Kohana 3.2.2?
    #38151854
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StasonixskyANA,

Кто-то явно ни в курсе дела что такое Kohana и модуль ORM...В курсе, в 374-х местах в проекте юзается.
Чем Вас предложеное решение не устраивает, Database::instance тоже Kohana?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / ORM::выборка по фильтрам в Kohana 3.2.2?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]