Kohana 3.1 ORM — условные параметры

Я пытаюсь достичь очень простой цели, однако, похоже, она не работает. Я хочу использовать ORM Kohana и условно добавить определенные параметры.

Например:

$query = ORM::factory('user')
  ->where('foo', '=', 'bar');

if (isset($some_var))
  $query->where('field', '=', $some_var);

$query->find_all();


Можно было бы подумать, что это должно сработать, но все, что я получаю от $query, — это большая жирная ерунда. Любые предложения, которые я бы очень признателен! Спасибо.


ИЗМЕНИТЬ:

Простой пример на этой странице Kohana показывает похожий запрос: http://kohanaframework.org/3.1/guide/orm/examples/simple

... Но даже когда я создаю экземпляр "пользовательской" модели, а затем пытаюсь find_all() в отдельном выражении, я ничего не получаю.

Это работает:

$query = ORM::factory('user')->find_all();

Это не работает:

$query = ORM::factory('user');
$query->find_all();

Возможна ошибка??


person DondeEstaMiCulo    schedule 20.03.2012    source источник


Ответы (2)


В вашем примере, который работает, вы присваиваете значение, возвращаемое из find_all(), в $query. Хотя в примере, который не работает, вы вообще не присваиваете значение, возвращаемое find_all().

инфраструктура Kohana

$query = ORM::factory('user');
$result = $query->find_all(); 
// you may now loop over $result

Когда вы посмотрите на API, вы увидите, что find() и find_all() работают по-разному.

person user449954    schedule 20.03.2012
comment
Боже мой, не могу поверить, что пропустил это. Фу. Спасибо что подметил это! - person DondeEstaMiCulo; 21.03.2012

С вашим кодом все в порядке, так как метод ORM::where возвращает объект ORM, поэтому проблем с цепочкой методов нет. Вы должны искать ошибки в другом месте (возможно, ваш $some_var установлен, но может быть пустым, поэтому ваше состояние может выглядеть иначе, чем ожидалось). Я бы попробовал с этим небольшим изменением:

if (!empty($some_var))
  $query->where('field', '=', $some_var);
person matino    schedule 20.03.2012
comment
Я хочу, чтобы проблема была только в этом. Но когда я удаляю строку if, я получаю тот же результат. Это похоже на то, что когда запрос разделен, он больше не работает. Я получаю тот же результат, когда использую DB::select. - person DondeEstaMiCulo; 20.03.2012
comment
Ну, все, что я могу сказать, это то, что у меня это всегда работало и работает, поэтому проблема ДОЛЖНА быть где-то еще в вашем коде. - person matino; 20.03.2012
comment
Если моя проблема не в этом коде, возможно, она связана с тем, как я пытаюсь получить доступ к данным? В моем файле представления у меня есть цикл foreach ($query as $user), и там я пытаюсь получить доступ к данным через $user->first_name. Нужно ли мне сначала сделать что-то еще, чтобы это сработало? Я не знаю, почему это должно иметь значение, но на данный момент я не знаю, что еще это может быть. Спасибо за вашу помощь. - person DondeEstaMiCulo; 20.03.2012
comment
Лучшее, что вы можете сделать, это опубликовать целые файлы контроллера/представления/модели. - person matino; 20.03.2012