Kohana 3.1 ORM: как сделать пункт «где в»

Благодаря отличной документации Kohana мне приходится прибегать к падению ниц на SO. ;)

Надеюсь, это действительно просто: я пытаюсь собрать все истории, принадлежащие определенной группе идентификаторов. Мой код выглядит следующим образом:

$story_ids = '(12,56,99,213,319)';
$stories = ORM::factory('story')->where('id', 'IN', $story_ids)->find_all();

Однако это явно не работает. Я получаю сообщение об ошибке MySQL, потому что в запросе вокруг строки $story_ids заключаются одинарные кавычки.

EDIT: я также пытался передать $story_ids в виде массива, но потом просто получаю "500 Internal Server Error"

Можно ли сделать то, что я прошу?

Заранее спасибо.


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


Ответы (2)


Возможно, вы забыли ->select()?

Кроме того, здесь описаны два способа здесь для использования ключевого слова «IN»:

ORM::factory('table1')->select('mls_id')->where('mls_id', 'NOT IN', DB::Select('mls_id')->from('table2'))->find_all();
ORM::factory('table1')->select('mls_id')->where('mls_id', 'NOT IN', DB::Expr('(SELECT mls_id FROM table2)'))->find_all();

Я обычно использую метод DB::Expr с тем, что вы делаете.

person JoshuaDavid    schedule 13.04.2011
comment
Однако я не выполняю подзапрос. У меня уже есть строка (или массив) идентификаторов, и я хочу просто передать ее в третий параметр метода where. Если бы я использовал DB::Expr(), это было бы просто вопросом: ORM::factory('story')-›where('id', 'IN', DB::Expr($story_ids))-› найти все();? - person DondeEstaMiCulo; 13.04.2011
comment
Что ж, хлопни меня по заднице и зови меня Чарли, это сработало! Обертывание моей строки $story_ids в DB::Expr() решило проблему. Большое спасибо! - person DondeEstaMiCulo; 13.04.2011

Передача $story_ids в виде массива должна работать.

$story_ids = array(12,56,99,213,319);
$stories = ORM::factory('story')->where('id', 'IN', $story_ids)->find_all();

Какую версию Коханы вы используете?

person Kusmayadi    schedule 01.05.2011
comment
Это указано в заголовке, но я использую 3.1.1, если быть более точным. Передача значений в виде массива возвращает ошибку 500, как указано в моем описании. DB::Expr отлично работает для меня, поэтому я использую его. :) - person DondeEstaMiCulo; 04.05.2011