yii2 で「joinWith」した側のテーブルの値を取得
背景
yii2 のアクティブレコードにて、リレーションしていて「joinWith」で結合したのだが、joinした相手の値を取得できずに困ったので記録しておく
joinWith参考:ActiveQuery, yii\db\ActiveQuery | API Documentation for Yii 2.0 | Yii PHP Framework
起きた問題
用意していたテーブル
①hoge_sourceテーブル
- id
- code
- created_at
②hoge_source_associations
- id
- hoge_source_id ← ①のidとforeignkey
- huga_destination_id
- value
- is_public
- created_at
書いていたコード
$hogeSource = HogeSource::find()->joinWith('hogeSourceAssociations') ->where([ HogeSourceAssociation::tableName(). '.is_public' => true, HogeSource::tableName(). '.code' => $code, ])->one();
アクティブレコードの結果
SELECT `hoge_source`.* FROM ....
上記のように、`hoge._source`.* になってしまうので
$hogeSource->value;
とやっても、
hoge_source_associationsテーブルのvalueが取れない。
解決策
$hogeSource->hogeSourceAssociations[0]->value;
ってやってリレーション先から値をとってくることで解決した。
まとめ
リレーション先から取得することで一旦解決はしたが、もっといい方法があれば知りたいなー