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 は更新されないということです。)結合を逆にしてください。
更新日:2025年01月15日
解決しなかった場合は
下記よりお問い合わせください