从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){}
我做错了什么?
答案 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(而不是另一个变量的引用副本),考虑到你没有提供任何来源,这就是我所能想到的。