キャスト - 日付型、Blob そして Null
キャスト - 日付型、Blob そして Null –
DB_DataObject_Cast ::date(), ::blob(), ::sql()
キャストによる処理 (文字列と数字を除く全て)
これは実験的なものです! しかしながら、文章化されています。
現在、限られた数のデータベースのみサポートしています
(もし、これをお気に入りのデータベースでサポートしたいのであれば、
修正内容を私に送ってください) 。
また、内部操作 / 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は、データベースに大きなバイナリデータをストアすることができる
フィールドです。
現在、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();
?>