首页 > 解决方案 > Laravel 5.7 覆盖默认模型表

问题描述

我知道我可以通过这样做来覆盖模型中的表格

protected $table = 'my_custom_table';

但是有没有办法强制执行自定义表命名约定,这样我就不必在每个模型中单独执行此操作?

例如:

public function getTable(){
    return env('DB_PREFIX') . '_' . $module_name . '_' . $entity_name
}

标签: phplaravellaravel-5

解决方案


正如Romano所建议的那样,我制作了一个自定义模型来扩展 Eloquent 模型,并且我制作的每个后续模型都将扩展我的模型而不是 Eloquent 模型。

namespace App;

use App\Traits\FindCaller;
use Illuminate\Database\Eloquent\Model;

class GenericModel extends Model
{
    use FindCaller;

    const CREATED_AT = 'creation_time';
    const UPDATED_AT = 'last_modified_time';
    const DELETED_AT = 'deleted_time';

    /**
     * Override to make the default model table name = "module_model"
     *
     * @return string
     */
    public function getTable()
    {
        if(!$this->table) {
            list($module, $model) = $this->getModelCallerEntities();
            return strtolower($module . '_' . $model);
        }

        return $this->table;
    }
}

每个后续模型:

use App\GenericModel;

class Xyz extends GenericModel
{
    ...
}

推荐阅读