モンスターカレンダー

 2004年6月 »
123456789101112131415161718192021222324252627282930

2004年6月25日アーカイブ

DB_DataObject insert 完結編

| コメント(0)

DB_DataObject insert の続きに挑戦。
やっと、できた。。。

まず、setFrom()は使えない。

$sale->setFrom($array);
$sale->insert();

としても、setFrom() 内でkeyは SQLの SETから除外されてしまう。

なので地道に

foreach($array $k=>$v){
 $sale->$k = $v;
}
$sale->insert();

とした。
テーブルのキーにシーケンスがない場合はこれでOK。

次に。。。
テーブルのキーにシーケンスがある場合

自分のスクリプトの書き方も悪かった&マニュアル読み込み不足で当初うまくいかず。。
結局DataObject.phpを追ってみて、ようやく次のシーケンスキーがとれず、無条件に1がセットされていると判明。
とれなかったのは、iniファイルにシーケンスキーの定義がなかったからだった。

sequence_m_sale : sale_no:sale_no_sql

などと書く。
これでinsert()はばっちり〜〜〜

と浮かれていたら、今度はupdate()で問題が。

いや大したことないといえばたいしたことはない。。か??
Keyの変更はできないってことです。

今日はDB_DataObject

| コメント(0)

DB_DataObjectについて。

update(),setFrom()を使う。

//フィールド名と値の配列を予め定義。(本当はFormから取得した値)
//フィールドは一部でもよい
$array=array("id"=>1, "name"=>"New Sale");

$sale = new DataObject_sale;
$sale->get(1);
$sale->setFrom($array);
$sale->update();

これでOK。

Insertもこれでいけるかとやってみた。

$sale->setFrom($array);
$ret = $sale->Insert();

...$ret = False でした。

配列を渡すことはできないのかーーーー。
うーん。
いちいち

$sale->id=2;
$sale->name="New Sale";

などと書かないとだめなのか。。

#DataObject_saleのラッパークラス作ってるので
#update($array),insert($array)と作りたかった。

if(strlen($_POST["name"])>0){
 $sale->name = "New Sale";
}
って、全部書く?

....そうするくらいなら$_POST配列から自分でSQL作った方が速い?

もう少し悩もう。

====================================
追記。

>if(strlen($_POST["name"])>0){
> $sale->name = "New Sale";
>}

こんなことしなくても $sale->$field_name って、書けるんですね。。

DataObject.php の中をのぞいてみました。
keyが、渡した値でなく 1 に無条件になっている。
どこかで。insertのはじめの方が怪しそう。

もうちょっと追ってみます。