1

Laravel の移行を使用していくつかのデータベース テーブルを作成していますが、DATETIME列ではなく列を作成できるかどうか疑問に思っていましTIMESTAMPた。私が使用しているコードは以下のとおりです。

$table->increments('id');
$table->string('name', 255);
$table->bigInteger('size');
$table->dateTime('downloaded_at');
$table->timestamps();

DATETIMEモデルのプロパティを使用して日付が返される形式を変更できることはわかっていますが、可能であればデータベースに入れたいと思います。

4

1 に答える 1

1

ソースを掘り下げましたが、タイムスタンプのタイプはハードコーディングされているため、単に再構成することはできませんDateTime

より良いアプローチは、(timestamps() を使用せずに) 独自の列を作成し、モデルでこれを行うことだと思います:

public class User extends Eloquent
{
      public function save()
      {
            $this->attributes['created_at'] = new DateTime;
            return  parent::save();
      }
}

別のアプローチは、ModelObserversを使用することです。

class UserObserver {

    public function saving($model)
    {
        //
    }
}

User::observe(new UserObserver);

timestamp()また、クラスの関数をオーバーライドすることもできますがBlueprint、日付などを処理するために Carbon を使用するため、コードの他の場所で Laravel を台無しにしないという保証はありません ...

class MyBlueprint extends Blueprint
 {
        public function timestamp($column)
        {
                return $this->addColumn('dateTime', $column);
        }
 }

次に、移行用のテーブル構造を定義するときに MyBlueprint を使用します。

 Schema::create('users', function(MyBlueprint $table) {
    // code
    $this->timestamps();
 }
于 2013-10-22T09:27:34.263 に答える