2013-07-18 21 views
8

Ben"artisan migrate" kullanıldığında zaman damgası sütun adını nasıl değiştirebilirim?

php artisan migrate 

komutu tarafından oluşturulan damgası sütun adlarını değiştirmek için mücadele ediyorum.

Daha önce aşağıdaki değişikliği yaptım. Eloquent sorgu oluşturucu kullandığımda, doğru bir şekilde sütun adı oluşturabilir, ancak yukarıdaki komutu kullandığımda, hala "created_at", "updated_at" ve "deleted_at" üretir. Bana yardım eden var mı? Çok teşekkürler.

/* vendor\framework\src\Illuminate\Database\Eloquent\Model.php */ 

/** 
* The name of the "created at" column. 
* 
* @var string 
*/ 
const CREATED_AT = 'datetime_created'; 

/** 
* The name of the "updated at" column. 
* 
* @var string 
*/ 
const UPDATED_AT = 'datetime_updated'; 

/** 
* The name of the "deleted at" column. 
* 
* @var string 
*/ 
const DELETED_AT = 'datetime_deleted'; 

/* vendor\framework\src\Illuminate\Database\Schema\Blueprint.php */ 

/** 
* Indicate that the timestamp columns should be dropped. 
* 
* @return void 
*/ 
public function dropTimestamps() 
{ 
    $this->dropColumn('datetime_created', 'datetime_updated'); 
} 

/** 
* Add a "deleted at" timestamp for the table. 
* 
* @return void 
*/ 
public function softDeletes() 
{ 
    $this->timestamp('datetime_deleted')->nullable(); 
} 
/** 
* Add creation and update timestamps to the table. 
* 
* @return void 
*/ 
public function timestamps() 
{ 
    $this->timestamp('datetime_created'); 

    $this->timestamp('datetime_updated'); 
} 
/** 
* Add a "deleted at" timestamp for the table. 
* 
* @return void 
*/ 
public function softDeletes() 
{ 
    $this->timestamp('datetime_deleted')->nullable(); 
} 

Not; "Çekirdek" i değiştirmek için iyi bir fikir olmadığını biliyorum. Birisi bana bu sınıfları genişletmenin en iyi yolunu söyleyebilirse gerçekten takdir ediyorum.

cevap

19

vendor klasörünün altındaki kodu asla düzenlemeyin. İlk, genellikle (varsayılan olarak) deponuzla taşınmaz, yani siz veya başka bir makinede çalışmak istediğinizde değişiklikleri kaybedersiniz. İkinci, composer update yaptığınız anda yazılır.


Bu söyleniyor ki, bu "çekirdek" dehşetini değiştirmekle başlayalım. Ardından/

abstract class BaseModel extends Eloquent { 

    /** 
    * The name of the "created at" column. 
    * 
    * @var string 
    */ 
    const CREATED_AT = 'datetime_created'; 

    /** 
    * The name of the "updated at" column. 
    * 
    * @var string 
    */ 
    const UPDATED_AT = 'datetime_updated'; 

    /** 
    * The name of the "deleted at" column. 
    * 
    * @var string 
    */ 
    const DELETED_AT = 'datetime_deleted'; 

} 

BaseModel.php

app/modeller: Illuminate\Database\Eloquent\Model.php için, sadece tüm sonraki modellerini uzanan olacağım hangi bir baz model oluşturmak ve içinde sabitleri üzerine , Illuminate\Database\Schema\Blueprint durum için ... Eh, kanlı alır:

  1. ..\Schema\Blueprint uzatın, Bahsettiğiniz yöntemleri üzerine yazarak.
  2. Yeni Blueprint sınıf ürünümüzü sınıf ürününüzün üzerine yazmak için ..\Schema\Builder numaralı telefonu kullanın.
    • Ayrıca yeni Builder sınıfınızdan genişletmek için ..\Schema\MySqlBuilder'u da uzatın.
  3. yeni Builder sınıfını kullanmak getSchemaBuilder yöntemi üzerine yazarak ..\Connection uzatın.
    • Ayrıca yeni Connection sınıftan uzatmak ..\MySqlConnection, ..\PostgresConnection, ..\SqlServerConnection ve ..\SQLiteConnection uzanır.
    • Not:..\MySqlConnection ayrıca getSchemaBuilder yöntem yeni MySqlBuilder sınıfını kullanmak genişletilmiş olması gerekir.
  4. yayını genişletilmiş Connection sınıfları kullanmak createConnection yöntemi üzerine yazarak ..\ConnectionFactory uzatın.
  5. bir ServiceProvider yeni db.factory bileşeni olarak yeni ConnectionFactory sınıfı kaydetmek için oluşturun ve providers altında bulunan app/config/app.php dosyada ekleyin. Laravel kaynak kod kazma yarım saat anlamaya sonra

yani, ben sadece göçler üzerinde aşağıdakileri yapın etmek o muhtemelen kolay olacağını sonuca vardık:

$table->timestamp(BaseModel::CREATED_AT); 
$table->timestamp(BaseModel::UPDATED_AT); 
+0

Harika! Cevabınız için çok teşekkürler! Yardımın için sağol. Çalışmamı yaklaşık 8 saat önce bitirdiğimden, yarın evdeki bilgisayarımda yarın deneyebilirim. – Jonathan

+0

Thakns çok şey Raphael! Bu çalışıyor! – Jonathan

İlgili konular