WEBアプリケーション研究室 開発ノート TOP

WEBアプリケーション研究室 開発ノート [Doctrine] 生SQLやPDOStatementをハイドレイトする-1対多編

スポンサーサイト

-------- --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

    このエントリーをはてなブックマークに追加

生SQLやPDOStatementをハイドレイトするで単純なクエリーのハイドレイトをやりましたが、Doctrineで私の好きな機能の一つ、1対多のleftJoinを旨い具合にハイドレイトしてくれる奴を生SQLでやってみました。
ちなみにテーブル定義はこんな感じです。


User:
columns:
username: string(255)
password: string(255)
indexes:
myindex:
fields: username
type: unique
actAs: [Timestampable]

Phonenumber:
columns:
user_id: integer
phonenumber: string(255)
primary_num: boolean
relations:
User:
foreignAlias: Phonenumbers
actAs: [Timestampable]
そしてコードが

$conn = Doctrine_Manager::connection();
$stmt = $conn->execute('
SELECT
u.id AS u__id,
u.username AS u__username,
u.password AS u__password,
u.created_at AS u__created_at,
u.updated_at AS u__updated_at,
p.id AS p__id,
p.user_id AS p__user_id,
p.phonenumber AS p__phonenumber,
p.primary_num AS p__primary_num,
p.created_at AS p__created_at,
p.updated_at AS p__updated_at
FROM user u
LEFT JOIN phonenumber p ON u.id = p.user_id
');
$hyd = new Doctrine_Hydrator();
$comp['user'] = array('table'=>Doctrine::getTable('User'));
$comp['phone'] = array(
'table' => Doctrine::getTable('Phonenumber'),
'parent' => 'user',
'relation' => $comp['user']['table']->getRelation('Phonenumbers')
);
$hyd->setQueryComponents($comp);

$result = $hyd->hydrateResultSet($stmt, array('u'=>'user', 'p'=>'phone'));
var_dump($result->toArray(true));
スポンサーサイト

    このエントリーをはてなブックマークに追加
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。