Laravel 5.7覆盖默认模型表

时间:2018-11-25 14:04:00

标签: php laravel laravel-5

我知道我可以通过执行

覆盖模型中的表
protected $table = 'my_custom_table';

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

例如:

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

1 个答案:

答案 0 :(得分:0)

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
{
    ...
}