性格悪い人が優勝

CakePHP で、質問させていただきます。CakePHPは、初心者です。

app/controllers のコントローラ「mobilehellow_controller.php」で、以下のようにデータをセットして、DBにインサートしようとしていますが、何もDBには追加されません。

$saveData = array(
"NUM" => $item[$hscan_offset]['kyujin_syokusyu'],
"JOBTYPE" => 'kyujin_syokusyu',
));
$this->Mobilehellow->create();
$this->Mobilehellow->save($saveData);

画面上には、こんな文字が表示されました。
Query: INSERT INTO "mobilehellows" ("NUM") VALUES ('nextval(''"helloworkmobilep01_NUM_seq"''')

DBの構成はこれです。
NUM integer NOT NULL
JOBTYPE text

エラーも何も出なので、どうしてなのかわかりません。
どうか、ご存知の方お教えください。

A 回答 (2件)

無事に解決できたようで、何よりです(^^



>「Query: SELECT currval('mobilehellows_id_seq') as max 」を、出させないには、何かフラグを設定するのでしょうか?

これはデバッグ用の出力ですね、デフォルト設定のままだと出力されます。
app/config/core.php
の45~50行目あたりに
Configure::write('debug',2);
というのがあると思います。この「2」を「1」以下にすれば出なくなると思いますよー。(^^)
    • good
    • 0
この回答へのお礼

またまた、ありがとうございます。

カラム      データ型
JOBTYPE   text
REFERENCE_NUMBER  text

の時、
REFERENCE_NUMBER  10010- 7414601
を探すために、以下のコーディングをしました。

ーーーーーーーーーー
$serchData = array("Mobilehellow" => array(
"REFERENCE_NUMBER" => trim($item[$hscan_offset]['seirino']),
));

$saveData = array("Mobilehellow" => array(
"JOBTYPE" => $item[$hscan_offset]['kyujin_syokusyu'],
"REFERENCE_NUMBER" => $item[$hscan_offset]['seirino'],
));

$data = $this->Mobilehellow->findAll($serchData);

if ($data=== false) {
$this->Mobilehellow->create();
$this->Mobilehellow->save($saveData);
}
ーーーーーーーーーーー

としたのですが、$dataの戻り値は、FALSEばかりです。

何が、いけないのでしょうか?

お礼日時:2010/08/21 23:55

こんにちは。

(^^
もしかしたら違うかもしれませんが、参考までに。

モデルの指定が上手くいっていないのかもしれません。
$this->Mobilehellow->save($saveData);
でインサートするには、変数$saveDataの配列の中身が、$saveData['モデル名']['そのモデルで使うテーブルのフィールド名']とならなくてはいけなかった気がします。

ここで、「エラーがでない」ということについてですが、このsave()というのは、「入れるべきものがあれば、インサートし、そうでなければスルーしてエラーも出さない」ものです。変数$saveDataの配列内でモデル名が「Mobilehellow」になっていないならば、このエラーが出ないという現象も納得がいくのではないでしょうか?

そこで、ちょっと手数ですが、試しに分かりやすい形で試してみると良いと思います(^^)例えば・・・

$saveData['Mobilehellow']['NUM'] = $item[$hscan_offset]['kyujin_syokusyu'];
$saveData['Mobilehellow']['JOBTYPE'] = 'kyujin_syokusyu';
$this->Mobilehellow->save($saveData);

とういうような3行の形で試してはいかがでしょうか? これでもダメなようならば、他に原因があるかもしれませんが、それがわかっただけでも一歩前進ということで・・・。
    • good
    • 0
この回答へのお礼

アドバイスいただき、ありがとうございます。

テーブルにシリアル値の列を設定していると、駄目だったようです。
その列を削除したら、うまくいきました。

あと、
「Query: SELECT currval('mobilehellows_id_seq') as max 」
を、出させないには、何かフラグを設定するのでしょうか?

お礼日時:2010/08/11 06:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!