[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ORM
Stasonix
Eсть модель объекта, в нем есть метод, который ищет все объекты, по определенным фильтрам:

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 ни вернет никаких объектов, как сделать так чтобы если этого фильтра нет, то наоборот, возвращались все объекты?
Invis1ble
Выучить, наконец, PHP ?
Тут как-бы ORM не причем, и Kohana тоже.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Stasonix
А если у меня 20 фильтров, половина есть, половина нету? Я не пойму намек...
Invis1ble
if (blablabla) {
$object->method1();
}

$object->method2();

так понятней?

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Stasonix
Да здравствует 20 методов!!!
Invis1ble
да здравствует ООП и каскадная файловая система коханы

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Stasonix
Цитата (Invis1ble @ 11.02.2013 - 19:08)
да здравствует ООП и каскадная файловая система коханы

а при чем здесь Kohana с ее каскадной файловой системой? Имхо, но это не то чтобы баг, просто не учет ( а может и мой ) в модуле ORM.

Пожалуй обойдусь:

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

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

$objects = ORM::factory('object')
->
find_all();

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


return $objects;
}


Хотя, чувствую что быть беде при таком подходе, учитывая все те же несколько фильтров...
Invis1ble
OMG
$object = ORM::factory('object');

if (!empty($filters['Role'])) {
$object->where('RoleId', '=', $filters['Role']);
}

return $object->find_all();

пожалуйста.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Stasonix
кул!
Stasonix
а если добавим фильтр `name` ситуация разная может быть, может быть поиск только по имени, только по RoleId или по имени и по RoleId сразу, или вообще с пустыми фильтрами (в таком случае все записи)?

Чувствую что все равно все упрется в логические дебри ( особенно с увеличением числа фильтров ).
Invis1ble
Я за тебя спроектировать архитектуру должен или что? я тебе итак уже код готовый дал, т.к. намеков ты не понимаешь...

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Stasonix
а нет, извини, все правильно! Добавится же просто метод к цепочке. Спасибо за намеки!
kaww
лучше использовать конструкцию вида
foreach($filters as $k=>$v) {

$stmt->where($k, '=', $v);
}

иначе придется добавлять условие если захотите фильтр по др полям
Invis1ble
kaww
об этом и шла речь

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Stasonix
Цитата (kaww @ 12.02.2013 - 01:17)
лучше использовать конструкцию вида
foreach($filters as $k=>$v) {

$stmt->where($k, '=', $v);
}

иначе придется добавлять условие если захотите фильтр по др полям

А если не `=` понадобится, а `IN` или `LIKE` в каком-то из фильтров?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.