どこで「好きではない」操作を行う必要があります。私はこれを行うことができることを知っています:
$predicate->like($a,$b);
しかし、「not like」やその他の否定された「not in」を実行する方法が見つかりません。方法はありますか、どこで文字列を作成する必要がありますか?
ありがとう。
どこで「好きではない」操作を行う必要があります。私はこれを行うことができることを知っています:
$predicate->like($a,$b);
しかし、「not like」やその他の否定された「not in」を実行する方法が見つかりません。方法はありますか、どこで文字列を作成する必要がありますか?
ありがとう。
あなたが言及したようnotLike
に、where オブジェクトにはメソッドがありません。しかしliteral
、あなたが望むものを渡すことができる方法があります:
$sql = new Sql($adapter);
$select = $sql->select();
$select->from('foo')
->where->literal('NOT LIKE ?', array('bar'));
echo $select->getSqlString();
出力は次のようになります。
SELECT "foo".* FROM "foo" WHERE NOT LIKE 'bar'
リテラル()の代わりにnotLike()のObjectメソッドを追加したい方への参考に
$predicate->notLike( $a, $b );
ZF2/Db/Sql/Predicate/NotLike.php を作成します。
namespace Zend\Db\Sql\Predicate;
class NotLike extends Like {
protected $specification = '%1$s NOT LIKE %2$s',
}
ZF2 /Db/Sql/Predicate/Predicate.phpに追加
public function notLike( $identifier, $like ) {
$this->addPredicate( new NotLike( $identifier, $like ), ($this->nextPredicateCombineOperator) ? : $this->defaultCombination );
$this->nextPredicateCombineOperator = null;
return $this;
}
テスト
$select = new Select;
$select->from( 'dbTable' )
->columns( array() )
->where->notLike( 'column', '%test%' );
echo $select->getSqlString();