->joinAdd()
->joinAdd() -- JOIN クエリを生成するために他の DataObject を追加する
概要
void $DB_DataObject->joinAdd ([object $dataobject [, string $joinType [, string $joinAs [, string $joinCol]]]])
説明
他の DataObject を追加して JOIN クエリを生成します。
このメソッドを使用するときは注意してください。
そのままのクエリの方が joinAddメソッドを使用するよりも
分かりやすいかも知れません。
このメソッドを実装してくれた Stijn de Reede に感謝します。
パラメータ
object $obj - 結合されるオブジェクトを
指定します。
(値がない場合、結合がクリアされます)
string $joinType - "LEFT" | "INNER " | "RIGHT" | ""
INNER がデフォルトで、"" は結合やリンクが WHERE
句に追加されず、単純に select ... from a,b,c を実行します。
注意: 'LEFT' は LEFT OUTER と等価です。
string $joinAs -
テーブルを別名で扱いたい場合、
二次テーブルからカラムを複数選択したいときに役に立つでしょう
string $joinCol -
このオブジェクトのテーブルでマッチさせたいカラムを指定します。
このテーブルを子オブジェクトの複数箇所にリンクする場合に必要です。
例 33-1 特定の結合するカラムを使用する user->friend (is a id of a person)
user->mother (is a id of another person) |
|
注意
この関数は、スタティックにコールする
ことはできません。
以下の例はテストされていません。DB_DataObject::debugLevel(1) を使用し、
これを使用したときに何が行われているかを理解し、
著者により良い例を送ってください。
例
例 33-2本当にシンプルな結合
<?php
// (requires links.ini to be set up correctly)
// get all the images for product 24
$i = new DataObject_Image();
$pi = new DataObjects_Product_image();
$pi->product_id = 24; // set the product id to 24
$i->joinAdd($pi); // add the product_image connectoin
$i->find();
while ($i->fetch()) {
// do stuff
}
?>
|
|
例 33-3結果の SQL SELECT * FROM image,product_image
LEFT JOIN image ON product_image
WHERE product_image.id = 24
AND product_image.pid = product.id |
|
例 33-4より複雑な JOIN クエリ
<?php
// an example with 2 joins
// get all the images linked with products or productgroups
$i = new DataObject_Image();
$pi = new DataObject_Product_image();
$pgi = new DataObject_Productgroup_image();
$i->joinAdd($pi);
$i->joinAdd($pgi);
$i->find();
while ($i->fetch()) {
// do stuff
}
?>
|
|
例 33-5結果の SQL SELECT * FROM image,product_image
LEFT JOIN image ON product_image
LEFT JOIN image ON productgroup_image
WHERE product
AND product.id = product_image.pid
AND product.id = productgroup_image.pid |
|