9

このようなSQLを取得する方法:

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

私が得るのは、左ではなく右にSql\Expressionがある場合です。

4

3 に答える 3

18

そのようなユーザーコードスニペットを使用できます。

$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が可能だとは思いません。

于 2013-01-07T10:58:56.600 に答える
5

あなたはこのようにそれを行うことができます:

$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');
于 2013-11-11T08:46:40.243 に答える
0

同様のものを探している他の人にとって、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'
?>
于 2014-01-15T18:57:45.320 に答える