<?php namespace App\Models; use CodeIgniter\Model; class Table1 extends Model { protected $table = 'table1'; public function getExample() { $subQuery = $this->db->table('table2') ->select('table2.column') ->where('column', 1) ->getCompiledSelect(); $this->db->table($this->table) ->join("{$subQuery} as table2", 'table1.column = table2.column', 'left', false) ->get()->getResult(); } }
getCompiledSelect()
は BaseBuilder
に生えてるから $this->db->table()
しないといけないっぽい。1
CodeIgniter4 では fromSubquery()
と selectSubquery()
が追加されたみたいだけど JOIN で使いたいときは CodeIgniter3 と同じように組み立てないといけないみたい。
joinSubquery()
的なものも欲しいっす…
- この記事では
$ php spark make:model
をしたときに作成される Model ファイル内で実装しています。 join()
の第三引数でescape
を無効にしています。外部からの値を許容する場合は十分に注意してください。
-
検証してない+記述量が増えるだけだけど
$this->db->newQuery()->from('table')
でもBaseBuilder
を返却してるからいけると思う。多分。↩