Skip to content

Commit 87ced0f

Browse files
committed
Added ability to use statements as fields
1 parent 7d2d079 commit 87ced0f

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

src/Builder/Select.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,15 @@ class Select extends Statement {
4343
* @return $this
4444
*/
4545
public function field($expression, $alias = null) {
46-
if(is_object($expression)) {
47-
$expression = (string)$expression;
46+
if($alias !== null) {
47+
$expression = (string) $expression;
48+
$expression = trim($expression);
49+
$expression = rtrim($expression, ';');
50+
$expression = trim($expression);
51+
$lines = explode("\n", $expression);
52+
$lines = array_map(function ($line) { return "\t\t{$line}"; }, $lines);
53+
$expression = join("\n", $lines);
54+
$expression = sprintf("(\n%s\n\t)", $expression);
4855
}
4956
if($alias === null) {
5057
$this->fields[] = $expression;

tests/Builder/SelectTest.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,4 +157,22 @@ public function testCount() {
157157

158158
$this->assertEquals("SELECT\n\tCOUNT(*)\nFROM\n\ttest1 t1\nINNER JOIN\n\ttest2 t2 ON t1.id=t2.id\nWHERE\n\t(t1.id > 10)\n;\n", $query);
159159
}
160+
161+
public function testSubselectAsField() {
162+
$query = TestSelect::create()
163+
->field('COUNT(*)')
164+
->from('t1', 'test1')
165+
->joinInner('t2', 'test2', 't1.id=t2.id')
166+
->where('t1.id > 10')
167+
->asString();
168+
169+
$query = TestSelect::create()
170+
->field($query, 'testfield')
171+
->from('t1', 'test1')
172+
->joinInner('t2', 'test2', 't1.id=t2.id')
173+
->where('t1.id > 10')
174+
->asString();
175+
176+
$this->assertEquals("SELECT\n\tCOUNT(*)\nFROM\n\ttest1 t1\nINNER JOIN\n\ttest2 t2 ON t1.id=t2.id\nWHERE\n\t(t1.id > 10)\n;\n", $query);
177+
}
160178
}

0 commit comments

Comments
 (0)