Zend 2.0でクエリを作成する方法は次のとおりです
$getVenues = $this->tableGateway->select(function (Select $select) {
$select->where->greaterThanOrEqualTo('lat', (float) $lat_min);
$select->where->greaterThanOrEqualTo('lng', (float) $lng_min);
$select->where->lessThanOrEqualTo('lat', (float) $lat_max);
$select->where->lessThanOrEqualTo('lng', (float) $lng_max);
});
次のクエリを出力しています:
SELECT `venues`.* FROM `venues` WHERE `lat` >= :where1 AND `lng` >= :where2 AND `lat` <= :where3 AND `lng` <= :where4
それぞれのパラメーターを:where*
入力すると、次のようになります。
SELECT `venues`.* FROM `venues` WHERE `lat` >= 39.730387437667 AND `lng` >= -86.332592054637 AND `lat` <= 40.020242510131 AND `lng` <= -85.954901904578
phpMyAdmin で生の SQL クエリを実行すると正しい結果が返されますが、Zend 2.0 クエリは 0 行を返します。
以下は、var_dump
Zend からのクエリ結果セットの 1 つです。
object(Zend\Db\ResultSet\ResultSet)#227 (8) {
["allowedReturnTypes":protected]=>
array(2) {
[0]=>
string(11) "arrayobject"
[1]=>
string(5) "array"
}
["arrayObjectPrototype":protected]=>
object(Application\Model\Venue)#208 (12) {
["id"]=>NULL
["fsq_venue_id"]=>NULL
["name"]=>NULL
["address"]=>NULL
["city"]=>NULL
["state"]=>NULL
["zip"]=>NULL
["country"]=>NULL
["cross_street"]=>NULL
["lat"]=>NULL
["lng"]=>NULL
["updated_at"]=>NULL
}
["returnType":protected]=>
string(11) "arrayobject"
["buffer":protected]=>
NULL
["count":protected]=>
int(0)
["dataSource":protected]=>
object(Zend\Db\Adapter\Driver\Pdo\Result)#214 (8) {
["statementMode":protected]=>
string(7) "forward"
["resource":protected]=>
object(PDOStatement)#215 (1) {
["queryString"]=>
string(117) "SELECT `venues`.* FROM `venues` WHERE `lat` >= :where1 AND `lng` >= :where2 AND `lat` <= :where3 AND `lng` <= :where4"
}
["options":protected]=>
NULL
["currentComplete":protected]=>
bool(false)
["currentData":protected]=>
NULL
["position":protected]=>
int(-1)
["generatedValue":protected]=>
string(1) "0"
["rowCount":protected]=>
int(0)
}
["fieldCount":protected]=>
int(12)
["position":protected]=>
NULL
}