代码之家  ›  专栏  ›  技术社区  ›  Norgul

Laravel 5.7替代默认模型表

  •  0
  • Norgul  · 技术社区  · 7 年前

    我知道我可以通过执行以下操作覆盖模型中的表

    protected $table = 'my_custom_table';
    

    但是,有没有一种方法可以强制执行自定义表命名约定,这样我就不必在每个模型中分别执行此操作?

    public function getTable(){
        return env('DB_PREFIX') . '_' . $module_name . '_' . $entity_name
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Norgul    7 年前

    作为 Romano sugested,我制作了一个自定义模型,该模型将扩展雄辩的模型,我制作的每个后续模型都将扩展我的模型,而不是雄辩的模型。

    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
    {
        ...
    }
    
    推荐文章