dポイントプレゼントキャンペーン実施中!

symfony+Doctrineで開発をしています。
他のプログラムは経験があるもののPHP初心者です。

2つのテーブルをjoinして、両テーブルの結果を取得します。
where句の条件どおりに行数を得られているので、
joinはできていると思います。
でも、結果を取得することが出来ません・・。

具体的には、joinしたテーブル(BTable)のカラムを取得しようとすると、
「Unknown record property / related component "value" on "ATable"」というエラーが出てしまいます。
(ATableにはvalueなんてないよ、って言っているみたいですが)

●ソースはこんな感じ
$query = Doctrine_Query::create()
->select('a.name, b.value')
->from('ATable a')
->innerJoin('a.Btable b')
->where('b.id = ?', $id);
$list=$query->execute();

foreach($list as $xxx){
print_r($xxx['name']);
print_r($xxx['value']);←ここでエラー
}

●エラーメッセージ
Unknown record property / related component "value" on "ATable"


そこで質問させてください。

・xxx['value']の箇所は、どのように記述すればいいのでしょうか?
・もしくは、Doctrineではjoinしたテーブルの値は取得できないのでしょうか?
 (webでいろいろ調べましたが、joinの例はあるものの、select結果を使う、といった例が見つかりませんでした・・)

方法がないのであれば、
あらかじめテーブルをjoinしたviewを作って、
それをselectするようにしようと思っています。

symfony+Doctrineに詳しい方がいらっしゃたら、
よろしくおねがいします。

A 回答 (1件)

すみません。

Doctrine なんだそれ!?って人です。(ほんとごめんなさい。)

ドキュメントをみてみたところ

// test.php

// ...
$q = Doctrine_Query::create()
->select('u.id')
->from('User u')
->leftJoin('u.Groups g')
->innerJoin('u.Phonenumbers p WITH u.id > 3')
->leftJoin('u.Email e');

echo $q->getSqlQuery();


SELECT
u.id AS u__id
FROM user u
LEFT JOIN user_group u2 ON u.id = u2.user_id
LEFT JOIN groups g ON g.id = u2.group_id
INNER JOIN phonenumber p ON u.id = p.user_id
AND u.id > 3
LEFT JOIN email e ON u.id = e.user_id

こうなるって書いているので JOIN 自体はありだと思います。

もう試されているかもしれませんが、

echo '<pre>'; // Webの場合は付けたほうが見やすいです
foreach($list as $xxx){
var_dump($xxx);
// print_r($xxx); // もしくはこっち
}
echo '</pre>';
してしまってはどうでしょう?

ORマッパーみたいなんで、オブジェクトアクセスなきがしますけど。
$xxx['name']->value みたいな。

それも var_dump でわかると思います。
    • good
    • 0
この回答へのお礼

お礼が遅くなってすみません。
Doctrineに関しては難しくて、結局SQLを直接書く方法を教えてもらって、それで書いてみました。

ありがとうございました!

お礼日時:2011/01/03 17:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!