ZF2表达式

时间:2013-03-23 22:10:35

标签: php select model zend-framework2 where

在mu ZF2项目中,我使用TableGateway建模。 内部函数负责根据搜索条件(city,postal_code,range,type)获取对象。

通常我通过简单的

获取数据行
$rowset = $this->tableGateway->select($where); 

在我的MySQL数据库中,我有程序 GetObjectsInCityRange(city,range),它返回地理编码城市坐标范围内的所有object_id

我打算添加where子句条件:

WHERE object_id IN (call GetObjectsInCityRange(city, range))

MySQL有可能吗?如何正确写入$ where数组元素使其工作?

2 个答案:

答案 0 :(得分:1)

您可以在select对象中调用where()方法,并在返回值上调用in()或创建where语句。

E.g。

$select = new Select();
$select->from($this->tableName)->columns(array($expression));
$where = new Where();
$where->in($identifier, $valueSet);
// or
$where->addPredicate(
    new Predicate\In($identifier, $valueSet)
);
// and then
$select->where($where);

并将其附加到选择对象。

以下链接正是您所需要的我相信:) http://framework.zend.com/manual/2.1/en/modules/zend.db.sql.html#in-identifier-array-valueset-array

希望这会有所帮助:)

答案 1 :(得分:0)

对于MySQL,建议您应该使用函数而不是过程,因为函数可以在任何sql查询中使用,而过程本身就是一个类似于语句的查询。实施例

call MyPrcedure();

SET var = MyFunction();

因此,您可以在大多数时间调用查询中的函数。但是根据我的知识,函数将返回有效的mysql数据类型,如varchar,int float等。因此查询行可能在In查询中不可用。然后只能执行您的查询以将您的过程逻辑转换为子查询并传递IN语句。

WHERE object_id IN (SUB_QUERY)