0

この質問とこれも確認しました。この質問で説明されているモデルを実装しようとしています。

私がしたいのは、メッセージコントローラーの追加機能で、スレッドテーブルにレコードを作成し(このテーブルには主キーと自動インクリメントのフィールドが1つしかありません)、そのIDを取得してメッセージテーブルに挿入することです既に持っているユーザー ID を message_read_state および thread_participant テーブルに保存します。

これは私がスレッドモデルでやろうとしていることです:

function saveThreadAndGetId(){
    //$data= array('Thread' => array());
    $data= array('id' => ' ');
   //Debugger::dump(print_r($data));
   $this->save($data);
   debug('id: '.$this->id);
    $threadId = $this->getInsertID();
    debug($threadId);
    $threadId = $this->getLastInsertId();
    debug($threadId);
    die();
    return $threadId;
}


$data= array('id' => ' ');

上記の関数のこの行は、スレッド テーブルに行を追加しますが、ID を取得できません。IDを取得する方法はありますか、それとも間違って保存していますか?

最初は、メッセージ コントローラーでクエリを実行していました。

$this->Thread->query('INSERT INTO threads VALUES();');

しかし、lastId関数が手動クエリでは機能しないことがわかったので、元に戻しました。

4

2 に答える 2

1

$data基本的に id の空の配列に設定しています' '。あなたが何を期待していたのかわかりません。:) 「id」を空の文字列に手動で設定せず、データを保存してみてください。その後、IDを取得する必要があります。

于 2012-11-01T20:33:51.167 に答える
0

これは、次の自動インクリメント値を返します。

/* @return int */
private function getNextThreadId() {
    $result = $this->Thread->query("SHOW TABLE STATUS LIKE 'threads';");
    $next = $result[0]['TABLES']['Auto_increment'];
    return $next;
}

スレッド -> またはモデルの他の名前

スレッド -> または db テーブルの他の名前

于 2012-11-02T22:53:35.160 に答える