<?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を返却してるからいけると思う。多分。↩