Zend framework2 如何在ZF2中的列名前添加Sql\Expression?

Zend framework2 如何在ZF2中的列名前添加Sql\Expression?,zend-framework2,Zend Framework2,如何像这样获取Sql: select * from foo where LOWER(foo_name) = 'test'; 我得到的结果是,如果Sql\Expression在右边,而不是在左边。您可以使用这样的代码片段 $where = new Where(); $sql = new Sql($adapter); $select = $sql->select(); $where->addPredicate(new Predicate\Expression('LOWER(foo_n

如何像这样获取Sql:

select * from foo where LOWER(foo_name) = 'test'; 

我得到的结果是,如果Sql\Expression在右边,而不是在左边。

您可以使用这样的代码片段

$where = new Where();
$sql = new Sql($adapter);
$select = $sql->select();
$where->addPredicate(new Predicate\Expression('LOWER(foo_name) = ?', 'test' ));
$select->from('foo')->where($where);

但是,我认为在Zend Framework 2上不可能使用右侧的Sql\Expression。

您可以这样做:

$sql = new SQL($adaptor);
$select = $sql->select()->from(array('f'=>'foo'));
$select = $select->where('foo_name' => new \Zend\Db\Sql\Expression("LOWER('test')"));
上述查询将返回为:

SELECT `f`.* FROM `foo` AS `f` WHERE `foo_name` = LOWER('test');

对于其他寻找类似产品的人来说,实际上有很多不同的方法来实现这一点,如ZF 2.2

链接(与公认答案相同)


请注意,Select::$where中没有执行命令“()”,这允许您继续方法链接。 Select::$where有一个uu get Magic方法catch,它在作为Sql\where实例的Select对象中返回受保护的Select::$\u where属性

谓词\Literal 1

<?php
$select->where( "LOWER(f.foo_name) = 'test'" );

//SELECT `f`.* FROM `foo` AS `f` WHERE LOWER(f.foo_name) = 'test'
?>
你救了我一天。谢谢:)真的很难找到任何关于这个的文档!
<?php
$select->where( "LOWER(f.foo_name) = 'test'" );

//SELECT `f`.* FROM `foo` AS `f` WHERE LOWER(f.foo_name) = 'test'
?>
<?php
$select->where( array( "LOWER(f.foo_name) = 'test'" ) );

//SELECT `f`.* FROM `foo` AS `f` WHERE LOWER(f.foo_name) = 'test'
?>
<?php
$select->where( new Predicate\Expression( "LOWER(f.foo_name) = 'test'" ) );

//SELECT `f`.* FROM `foo` AS `f` WHERE LOWER(f.foo_name) = 'test'
?>