凡人エンジニアのゆるクライム

今出来ないからこそ一歩一歩登ってく

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

書いていたコード

$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; ってやってリレーション先から値をとってくることで解決した。

まとめ

リレーション先から取得することで一旦解決はしたが、もっといい方法があれば知りたいなー