Kohana 3 - построитель запросов дает 0 строк - PullRequest
1 голос
/ 01 июня 2010

Следующий запрос возвращает одну строку, как и ожидалось при запуске из phpmyadmin.

SELECT units .  * , locations .  *
FROM units, locations
WHERE units.id = '1'
AND units.location_id = locations.id
LIMIT 0 , 30 

Но когда я пытаюсь сделать это в Kohana 3:

$unit = DB::select('units.*', 'locations.*')
->from('units', 'locations')
->where('units.id', '=', $id)->and_where('units.location_id', '=', 'locations.id')
->execute()->as_array();
var_dump($unit);

Он печатает

array (0) {}

Что я делаю не так?

Ответы [ 2 ]

5 голосов
/ 01 июня 2010

Я не могу сразу сказать, что не так с этим построителем запросов, однако, проверьте это для целей отладки.

После вызова execute() в вашей цепочке БД попробуйте это.

echo Database::instance()->last_query;

В обычном SQL будет показан последний выполненный запрос. Стоит посмотреть, что сгенерировал построитель запросов, и чем он отличается от вашего SQL, который вы использовали в phpmyadmin.

Если ничего не помогает, просто используйте простые методы запроса.

$query = "SELECT units .  * , locations .  *
FROM units, locations
WHERE units.id = :id
AND units.location_id = locations.id
LIMIT 0 , 30 ";

$unit = Db::query(Database::SELECT, $query)
          ->bind(':id', (int) $id)
          ->execute()
          ->as_array();
0 голосов
/ 06 июня 2010

Вы заметите, что ваш звонок на last_query вернулся (в части where):

WHERE units.location_id = 'locations.id' значение, передаваемое для сравнения, указывается в виде строки, поэтому пустой набор результатов. Это может помочь вам: http://kohanaframework.org/guide/api/DB#expr

Что касается вашей фатальной ошибки, дважды проверьте, чтобы убедиться, что вы явно передаете $ id (а не ссылочную копию другой переменной), это все, что я могу подумать, учитывая, что вы не предоставляете никакого источника.

...