キャスト - 日付型、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 型を使用することができます。

生の 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();



?>
エラーをスローする (Previous) DB_DataObject_FormBuilder (Next)
Last updated: Sun, 23 Nov 2014 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

Note by: monkeboy
Don't forget to add the include:

include_once 'DB/DataObject/Cast.php';

You need to do the following to use the SQL NOW() datetime function:

$table->created_on = DB_DataObject_Cast::sql('NOW()');
$table->update();

Hope that helps someone.

(I'm not sure if I agree that this is a cast function, I think it is more like a 'raw' or 'do not escape', i thought casting was changing data types, e.g. string to int is a cast. But who cares what name it has -- it works :-) )

monk.e.boy