Samples
// query template, probably loaded from external file $template = "select emp.* from employee emp" . " join departments dep on emp.id_department = dep.id" . " @{where}" . " @{order}" . " limit :limit offset :_offset"; // create "where" clause $where = \Query\Expressions::where() ->andExpr("emp.surname = :surname") ->andExpr("emp.name like :name") ->andExpr( \Query\Expressions::orExpr( \Query\Expressions::expr("emp.salary < :salary")->andExpr("emp.position in (:positionList)"), \Query\Expressions::not("emp.age < :ageThreshold") ) ) ->andExpr("status != 'ARCHIVED'"); // create "order" clause $order = \Query\Expressions::orderBy()->add("dep.id desc")->add("cust.salary"); // create builder from template and fill clauses $sql = \Query\QueryBuilder::query($template) ->set("where", $where) ->set("order", $order) ->build(); //equal, notequal, greaterthan, lessthan, in, like $expr = \Query\Expressions::where() ->andExpr(new \Query\EqualExpr("surname", "surname")) ->andExpr(new \Query\LikeExpr("name", "name")) ->andExpr( \Query\Expressions::orExpr( \Query\Expressions::expr(new \Query\LessThanExpr("salary", "5000")) ->andExpr(new \Query\InExpr("position", "1,2,3")) ->andExpr(new \Query\InExpr("position", array(1,2.6,"3", "a"))), \Query\Expressions::not(new \Query\GreaterThanExpr("age", "`ageThreshold`")) ) ) ->andExpr(new \Query\NotEqualExpr("status", "ARCHIVED")); $columns = array( "surname" => "prefix_surname", "name" => "prefix_name", ); $sql = \Query\MysqlQueryBuilder::query($expr, $columns)->build(); $sqlResult = >>>STRBLOCK where prefix_surname = 'surname' and prefix_name like 'name' and ((salary < 5000 and position in (1,2,3) and position in (1,2.6,3,'a')) or (not (age > `ageThreshold`))) and status != 'ARCHIVED' STRBLOCK; //operator : evaluate $expr = \Query\Expressions::expr(new \Query\EqualExpr("surname", "myname")); $dict = array(); $dict['surname'] = 'myname'; $expr->evaluate($dict); $expr1 = $expr->andExpr(new \Query\EqualExpr("surname", "yourname")); $expr->evaluate($dict); $expr2 = $expr->andExpr(new \Query\NotEqualExpr("surname", "yourname")); $expr2->evaluate($dict); $dict['salary'] = 6000; $expr3 = $expr2->andExpr(new \Query\GreaterThanExpr("salary", "5000")); $expr3->evaluate($dict); $expr4 = $expr2->andExpr(new \Query\LessThanExpr("salary", "5000")); $expr4->evaluate($dict); $dict['position'] = 2; $dict['age'] = 25; $dict['ageThreshold'] = 45; $expr5 = \Query\Expressions::expr(new \Query\EqualExpr("surname", "myname")) ->andExpr(new \Query\NotEqualExpr("surname", "yourname")) ->andExpr(new \Query\GreaterThanExpr("salary", "5000")) ->andExpr(new \Query\LessThanExpr("salary", "7000")) ->andExpr(new \Query\OrExpr( new \Query\InExpr("position", "1,2,3"), new \Query\NotExpr( new \Query\InExpr("position", array(5, 6, 7)) ) ) ) ->andExpr(\Query\Expressions::not(new \Query\GreaterThanExpr("age", "`ageThreshold`"))); $expr5->evaluate($dict);
请参见测试用例:QueryTest.php
github: PHP query build strings