2015-07-11 3 views
0

Eloquent имеет некоторые предположения относительно таблиц db.Каков правильный способ настройки Eloquent глобально?

  • Он использует множественное имя класса для имен таблиц. Я использую единственные существительные для имени таблиц.
  • По умолчанию, Eloquent ожидает created_at и updated_at столбцов. Я использую cData и uDate
  • Я использую camelCase для обозначения столбцов, которые не являются underline_отделимыми именами.

Я знаю, что можно использовать свойства класса для их замены. Каков правильный способ его конфигурации в глобальном масштабе?

ответ

0

Вместо расширения класса Model создайте новый класс, например MyModel, и настройте там свои атрибуты. Затем продолжите MyModel

0

Лучший способ - создать свою собственную базовую модель, которая расширяет Eloquent. После этого вы можете определить новые значения для столбцов временных меток и переопределить getTable() метод:

class BaseModel extends Model { 

    const CREATED_AT = 'cData'; 
    const UPDATED_AT = 'uData'; 

    /** 
    * Get the table associated with the model. 
    * 
    * @return string 
    */ 
    public function getTable() 
    { 
     if (isset($this->table)) return $this->table; 

     return str_replace('\\', '', snake_case(class_basename($this))); 
    } 
} 

Тогда пусть все ваши модели расширить эту базовую модель:

class User extends BaseModel 
+0

Спасибо, а как насчет имен столбцов? Я использую camelCase для обозначения столбцов, а не underline_separated names. – PHPst

+0

Я не думаю, что вам нужно сделать что-нибудь особенное. Вы можете добавить 'public static $ snakeAttributes = true;', но это используется только для имен отношений и кэш-мутаторов. – lukasgeiter

0

вы можете сделать это путем редактирования поставщика \ рамки \ src \ Illuminate \ Database \ Eloquent \ Model.php.

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

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

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

Но, честно говоря, редактирование основного источника не является хорошей идеей. Таким образом, вы можете сделать это

class MyModel extends Model { 

    /** 
    * The name of the "created at" column. 
    * 
    * @var string 
    */ 
    const CREATED_AT = 'cData'; 
     /** 
    * The name of the "updated at" column. 
    * 
    * @var string 
    */ 
    const UPDATED_AT = 'uData'; 

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

Теперь напишите вы модель расширения MyModel вместо оригинального Model. например:

class User extends MyModel{ 
    //Yes, if you want to change default table name then you should do this. Shouldn't be global. 
    protected $table = "user"; 
}