これは実験的なものです! しかしながら、文章化されています。 現在、限られた数のデータベースのみサポートしています (もし、これをお気に入りのデータベースでサポートしたいのであれば、 修正内容を私に送ってください) 。 また、内部操作 / API は将来変更されるかも知れません。
DataObjects は、数字と文字列に焦点を当てた データベースで動作させることは非常に簡単です。 また、日付型フィールドに対しても使用することができます (けれども、希望する文字列に正しくフォーマットしなければなりません)。 また、生の SQL query() を使用することで、 他の型に対しても使用することができます。 また、文字列値 "null" は自動的にデータベース内で NULL に変換されます。
より明確な方法でよりリッチなデータベース型に対するコードを提供するための 努力により、DB_DataObject_Cast オブジェクトは作られました。 その狙いは、より一般的でない型を意味するオブジェクトを 簡単に生成することです。 以下が使用例です。
キャストオブジェクトは、 クエリの組み立てと値の割り当ての両方で使用することができます。
クエリの組み立てと値の割り当てにおけるキャストオブジェクト
<?php
// using Cast Objects for building a query.
$person = DB_DataObject::factory('person');
// assign the value of birthday to a Cast object with a date.
$person->birthday = DB_DataObject_Cast::date(2000,12,30);
$person->find();
while ($person->fetch()) {
echo "{$person->name} has a birthday on 30 december 2002<BR>";
}
// use Cast Objects for assigning values.
$person = DB_DataObject::factory('person');
$person->get(12);
// set the persons's birthday to 30 december 2000
$person->birthday = DB_DataObject_Cast::date(2000,12,30);
// now update the database.
$person->update();
?>
ご覧の通り、このコンポーネントは未成熟なので、 なにかリクエストやアイデアがあれば、遠慮なく alan_k at php dot net に連絡してください。
blobは、データベースに大きなバイナリデータをストアすることができる フィールドです。
現在、blob は bytea 型を使用することで postgres のみサポートされています (他のデータベースのコードを私にメールしてください)。
写真と巨大なテキストファイルの挿入
<?php
$person = DB_DataObject::factory('person');
$person->name = 'fred'
// use blob for binary data.
$person->photo = DB_DataObject_Cast::blob(file_get_contents('xxx.jpg'));
// use string for textural data into a blob type.
$person->xmldocs = DB_DataObject_Cast::string(file_get_contents('xxx.xml'));
// now insert into the database.
$person->insert();
?>
ほとんどの日付が ISO 標準形式でデータベースにストアされます。 このメソッドは、年月日、人間が読むことができる 日/月/年、 あるいは ISO 形式の 年-月-日 のいずれかから日付型を生成することができます。 これは、簡単な規則に基づいて不足している値を埋めます。
色々な形式の日付の挿入
<?php
$person = DB_DataObject::factory('person');
$person->name = 'fred'
// use a human readable date
// full format
$person->birthday = new DB_DataObject_Cast::date('21/12/2003');
// use only a month/year - actually sets to 1 december 2003
$person->expires = DB_DataObject_Cast::date('12/2003');
// use only a year only - actually sets to 1 jan 2003
$person->expires = DB_DataObject_Cast::date(2003);
// use a iso formated
// full formated
$person->birthday = DB_DataObject_Cast::date('2003-12-21');
// use only a year-month - actually sets to 1 december 2003
$person->expires = DB_DataObject_Cast::date('2003-12');
// using array syntax
// full formated
$person->birthday = DB_DataObject_Cast::date(2003,12,21);
// use only a year-month - actually sets to 1 december 2003
$person->expires = DB_DataObject_Cast::date(2003,12);
// the real values are stored in object variables
echo $person->birthday->year; // prints 2003
echo $person->birthday->month; // prints 12
echo $person->birthday->day; // prints 21
// you can do simple date addition (similar to mktime)
$d = DB_DataObject_Cast::date('01/12/2003');
$nextMonth = DB_DataObject_Cast::date($d->year,$d->month+1,1);
?>
いくつかの型は SQL 固有、 あるいはデータベース固有でさえあるかも知れません。 このため、SQL 文の一部として生の文字列を配置するために SQL 型を使用することができます。
生の SQL を使用する
<?php
$person = DB_DataObject::factory('person');
$person->get(12);
// set the birthday to null.
$person->birthday = DB_DataObject_Cast::sql('NULL');
// do a sql cast statement (postgres specific)
$data = DB_DataObject_Cast::sql('cast("123123",datetime)');
// now insert into the database.
$person->insert();
?>