2013-07-18 9 views
8

मैं टाइमस्टैम्प स्तंभ नाम है जिसके द्वारा"कारीगर माइग्रेट" का उपयोग करते समय मैं टाइमस्टैम्प कॉलम नाम कैसे बदल सकता हूं?

php artisan migrate 

आदेश उत्पन्न कर रहे हैं बदलने के लिए संघर्ष कर रहा हूँ।

मैंने पहले से ही निम्नलिखित परिवर्तन किए हैं। जब मैं वांछित क्वेरी बिल्डर का उपयोग करता हूं, तो यह सही ढंग से कॉलम नाम उत्पन्न कर सकता है, लेकिन जब मैं ऊपर दिए गए आदेश का उपयोग करता हूं, तो यह अभी भी "create_at", "update_at" और "delete_at" उत्पन्न करता है। क्या कोई मेरी मदद कर सकता है? बहुत बहुत धन्यवाद।

/* 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(); 
} 

पी.एस. मुझे पता है कि "कोर" को संशोधित करना एक अच्छा विचार नहीं है। अगर कोई मुझे उन वर्गों का विस्तार करने का सबसे अच्छा तरीका बता सकता है तो मैं वास्तव में इसकी सराहना करता हूं।

उत्तर

19

vendor फ़ोल्डर के तहत कोड कभी भी संपादित न करें। पहले, यह आमतौर पर (डिफ़ॉल्ट रूप से) आपके भंडार के साथ नहीं किया जाता है, इसलिए यदि आप या कोई और कभी किसी अन्य मशीन पर काम करना चाहता है तो आप परिवर्तन खो देंगे। दूसरा, इस समय आप इसे composer update पर ओवरराइट कर देंगे।


ठीक है, कहा जा रहा है, चलो इस "कोर को संशोधित" डरावनी से निपटना शुरू करते हैं। BaseModel.php

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'; 

} 

फिर

एप्लिकेशन/मॉडल /: Illuminate\Database\Eloquent\Model.php के लिए, बस एक बेस मॉडल, जिसमें से आप अपने बाद के सभी मॉडल का विस्तार हो जाएगा बनाने के लिए, और उस में स्थिरांक के ऊपर लिख , Illuminate\Database\Schema\Blueprint मामले के लिए ... खैर, यह खूनी हो जाता है:

  1. बढ़ाएँ ..\Schema\Blueprint, तरीकों आप का उल्लेख अधिलेखित।
  2. ..\Schema\Builder बढ़ाएं, अपने नए Blueprint कक्षा का उपयोग करने के लिए createBlueprint विधि को ओवरराइट करना।
    • अपने नए Builder कक्षा से विस्तारित करने के लिए ..\Schema\MySqlBuilder भी बढ़ाएं।
  3. ..\Connection बढ़ाएँ, अपनी नई Builder वर्ग का उपयोग करने के getSchemaBuilder विधि को अधिलेखित।
    • इसके अलावा ..\MySqlConnection, ..\PostgresConnection, ..\SqlServerConnection और ..\SQLiteConnection का विस्तार अपने नए Connection वर्ग से विस्तार करने के लिए।
    • नोट:..\MySqlConnection को अपनी विधि को अपने नए MySqlBuilder वर्ग का उपयोग करने के लिए विस्तारित करने की भी आवश्यकता है।
  4. ..\ConnectionFactory बढ़ाएँ, आपकी विस्तृत Connection वर्गों का उपयोग करने के createConnection विधि को अधिलेखित।
  5. एक ServiceProvider नई db.factory घटक के रूप में अपनी नई ConnectionFactory वर्ग रजिस्टर करने के लिए बनाएँ, और अपने app/config/app.php फ़ाइल पर यह जोड़ने के लिए, providers के तहत।

तो, के बाद आधे घंटे के Laravel के स्रोत कोड के माध्यम से खुदाई कि यह पता लगाने की है, मैं निष्कर्ष है कि यह शायद आसान होगा करने के लिए बस अपने माइग्रेशन पर निम्न उपाय अपनाते हैं के लिए आया था:

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

महान! उत्तर के लिए आपका बहुत - बहुत धन्यवाद! तुम्हारी मदद के लिए शुक्रिया। चूंकि मैंने 8 घंटे पहले कार्यालय में अपना काम पूरा कर लिया था, इसलिए शायद मैं इसे अपने होम पीसी पर कल ही कोशिश कर सकता हूं। – Jonathan

+0

बहुत राफेल Thakns! यह काम! – Jonathan

संबंधित मुद्दे

 संबंधित मुद्दे