全局配置Eloquent的正确方法是什么?

时间:2015-07-11 11:26:34

标签: php laravel eloquent

Eloquent对db表有一些假设。

  • 对表名使用多个类的名称。我使用单数名词作为表格'名称
  • 默认情况下,Eloquent需要created_atupdated_at列。我使用cDatauDate
  • 我使用camelCase命名列而不是underline_separated names。

我知道可以使用类属性来覆盖它们。全局配置的正确方法是什么?

3 个答案:

答案 0 :(得分:0)

而不是扩展Model类,而是创建一个新类,例如MyModel,并在那里设置您的属性。然后扩展MyModel

答案 1 :(得分: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

答案 2 :(得分:0)

您可以通过编辑vendor \ framework \ 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";
}