PADOにおいてもJOIN句の利用は可能です。loadメソッドの第2引数でjoinを用いて以下のように記述します。
$terms = ['rev_type' => 0, 'workspace_id' => 1];
$args = [
'join' => [
'meta', // 結合するモデル
['id', 'object_id', 'LEFT JOIN'], // 結合元テーブルのカラム名, 結合先テーブルのカラム名, 結合方式
['model' => 'asset'], // 結合するモデルの抽出条件(必要な場合のみ指定。この場合は`mt_meta`.`meta_model` = 'asset'という条件が追加されることになる)
'id,object_id,text', // 結合先テーブルから取得するカラム(必要な場合のみ指定)
],
];
$assets = $app->db->model('asset')->load($terms, $args, 'id,file_name');
上記コードで発行されるクエリは以下の通りです。
SELECT mt_asset.asset_id, mt_asset.asset_file_name, mt_meta.meta_id, mt_meta.meta_object_id, mt_meta.meta_text
FROM mt_asset
JOIN mt_meta ON mt_asset.asset_id = mt_meta.meta_object_id
WHERE meta_model = ? AND ( asset_rev_type = ? AND asset_workspace_id = ? )
カラム値を取得する場合は通常$obj->カラム名と記述しますが、結合したモデルのカラム値を取得する場合は$obj->モデル名_カラム名となります。(本記事の例では$obj->meta_text)
なお、結合したモデルのカラムに値をセットして更新することはできません。(本記事の例では$obj->meta_textの値を更新して$obj->save()してもmt_meta.textは更新されないということです。)結合を逆にしてください。