0

テーブルのcreation_timeフィールドを自動的に更新できない理由:

id | 名前| Creation_time

Creation_time- >タイプ:タイムスタンプ、デフォルト値:CURRENT_TIMESTAMP

次のようなステートメントを使用して、cakephpにデータを保存しようとすると:

$this->Model->create();
$this->Model->save(array('name'=>'...'));

新しいデータをテーブルに挿入しましたが、作成時間はありませんでした。Mysqlステートメントに挿入を実行すると、フィールドが現在のタイムスタンプとして自動的に更新されるのは異常です。

Cakephpのドキュメントのように作成されたフィールドを使用できることは知っていますが、私の場合、同じプロジェクトで作業している他のメンバーが使用するテーブルであるため、既存のフィールド名を変更したくありません。

教えてください。

4

2 に答える 2

2

Cakephpでは、「created」のような従来の名前を使用することをお勧めします。フィールドは日時タイプになります。ただし、独自のフィールドを作成する場合は、通常の設定例を使用して、実際の日付と時刻をフィールドに手動で挿入する必要があります。

$this->Model->set('creation_time', CURRENT_TIMESTAMP); 

ここで、current_timestampは、モデルを保存した後に作成する必要のある変数です。

しかし、cakephpの最良の方法は、慣例名を使用することです。慣例に従わない名前を使用することはお勧めしません。

于 2012-07-30T06:38:45.083 に答える
0

を呼び出すと$this->Model->create()、Cakeは含まれているデータに$this->Modelデフォルト値を入力します。デバッグする場合$this->Model->data

debug($this->Model->data);

creation_timeはすでに設定されていますが、文字列があります。

array(
    'Model' => array(
         ...,
         'creation_time' => 'CURRENT_TIMESTAMP'
)

)。

したがって、CakeがINSERTクエリを生成するとき、これには文字列としてcreation_timeフィールドが含まれます。CURRENT_TIMESTAMP

INSERT INTO `models` (..., `creation_time`, ...) VALUES (..., 'CURRENT_TIMESTAMP', ...)

フィールドをデータテーブルに保持する場合creation_timeは、有効なクエリを生成するために、データを保存する前にデフォルト値を削除できます。

$this->Model->create();
unset($this->Model->data['Model']['creation_time']);
$this->Model->save(...);
于 2012-07-30T07:14:33.053 に答える