public function testAssemble() { $clause = new OrderByClause(); $clause->addField((new FieldExpression())->setField('first')); $this->assertEquals('ORDER BY first', QueryAssembler::stringify($clause)); $clause->clearFields(); $clause->addField((new FieldExpression())->setField('first'), 'ASC'); $this->assertEquals('ORDER BY first ASC', QueryAssembler::stringify($clause)); $clause->clearFields(); $clause->addField((new FieldExpression())->setField('first'), 'DESC'); $this->assertEquals('ORDER BY first DESC', QueryAssembler::stringify($clause)); $clause->addField((new FieldExpression())->setField('second'), 'ASC'); $this->assertEquals('ORDER BY first DESC, second ASC', QueryAssembler::stringify($clause)); $clause->addField('third', 'DESC'); $this->assertEquals('ORDER BY first DESC, second ASC, third DESC', QueryAssembler::stringify($clause)); $clause->addField(CustomSelectExpression::create('DATE(`test`)')); $this->assertEquals('ORDER BY first DESC, second ASC, third DESC, DATE(`test`)', QueryAssembler::stringify($clause)); }
public function orderBy($fields) { /** * @var $this IStatement */ $orderClause = new OrderByClause(); if (is_array($fields)) { foreach ($fields as $field => $order) { if (Strings::containsAny($order, ['asc', 'desc'], false)) { $orderClause->addField($field, $order); } else { $orderClause->addField($order); } } } else { if (func_num_args() > 1) { foreach (func_get_args() as $field) { $orderClause->addField($field); } } else { $orderClause->addField($fields); } } $this->addClause($orderClause); return $this; }
public function assembleOrderByClause(OrderByClause $clause) { $orders = []; foreach ($clause->getFields() as $field) { $orders[] = trim($this->assembleSegment($field) . ' ' . strtoupper($clause->getOrder($field, ''))); } return $clause->getAction() . ' ' . implode(', ', $orders); }