Kohana 3 - “查询”构建器提供0行

时间:2010-05-31 21:33:50

标签: php kohana builder kohana-3

从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 个答案:

答案 0 :(得分:5)

我无法立即告诉该查询构建器有什么问题,但是,请将其签出以进行调试。

在您的数据库链上调用execute()后,请尝试此操作。

echo Database::instance()->last_query;

这将在纯SQL中显示上次执行的查询。值得查看查询生成器生成的内容,以及它与您在phpmyadmin中使用的SQL的不同之处。

如果所有其他方法都失败了,只需使用普通查询方法。

$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();

答案 1 :(得分:0)

您会注意到您last_query的号码已退回(where部分):

WHERE units.location_id = 'locations.id'传递用于比较的值被引用为字符串,因此为空结果集。这可能会对您有所帮助:http://kohanaframework.org/guide/api/DB#expr

至于你的致命错误,仔细检查以确保你明确地传递$ id(而不是另一个变量的引用副本),考虑到你没有提供任何来源,这就是我所能想到的。