このようなSQLを取得する方法:
select * from foo where LOWER(foo_name) = 'test';
私が得るのは、左ではなく右にSql\Expressionがある場合です。
このような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);
ただし、ZendFramework2では右側の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の時点で、これを達成するためのかなりの数の異なる方法が実際にあります。
連鎖(受け入れられた答えと同じ)
<?php
$sql = new Sql($adapter);
$select = $sql->select();
$select->from( array( 'f' => 'foo' ) )
->where
->addPredicate( new Predicate\Expression( 'LOWER(f.foo_name) = ?', 'test' ) );
//SELECT `f`.* FROM `foo` AS `f` WHERE LOWER(f.foo_name) = :where1
//:where1 = 'test'
?>
Select :: $の実行コマンド「()」がないことに注意してください。ここでは、メソッドチェーンを続行できます。Select :: $ whereには、Sql\WhereのインスタンスであるSelectオブジェクト内の保護されたSelect::$_whereプロパティを返す__getMagicメソッドcatchがあります。
Predicate \ Literal 1
<?php
$select->where( "LOWER(f.foo_name) = 'test'" );
//SELECT `f`.* FROM `foo` AS `f` WHERE LOWER(f.foo_name) = 'test'
?>
Predicate \ Literal 2
<?php
$select->where( array( "LOWER(f.foo_name) = 'test'" ) );
//SELECT `f`.* FROM `foo` AS `f` WHERE LOWER(f.foo_name) = 'test'
?>
上記の2つは、Select :: whereメソッドに指定された配列または引数のインデックス値(列識別子)が文字列である場合、Predicate\Literalオブジェクトを自動的に作成します。
Predicate \ Expression(手動)
<?php
$select->where( new Predicate\Expression( "LOWER(f.foo_name) = 'test'" ) );
//SELECT `f`.* FROM `foo` AS `f` WHERE LOWER(f.foo_name) = 'test'
?>