我知道我可以通过执行
覆盖模型中的表protected $table = 'my_custom_table';
但是有一种方法可以强制执行自定义表命名约定,这样我就不必分别在每个模型中都这样做?
例如:
public function getTable(){
return env('DB_PREFIX') . '_' . $module_name . '_' . $entity_name
}
答案 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
{
...
}