【问题标题】:Set fillable aliases in Laravel Model, based on env variable? [duplicate]根据环境变量在 Laravel 模型中设置可填充别名? [复制]
【发布时间】:2020-06-17 05:56:10
【问题描述】:

在我当前的 Laravel 6 项目中,我有两种不同类型的数据库,它们的列名无法更改。我确定的最简单的解决方案是在我的模型中创建一个函数,以根据函数的返回来切换 $fillable 值。但是,当尝试设置 protected $fillable = $this->aliasSwitch($is_local); 的值时,我在代码编辑器中收到一条错误消息 Constant expression contains invalid operations。我对受保护的变量类型有什么误解吗?有没有我没有看到的解决方法?

型号:

public function __construct($env = '') {
        $prefix = $env ? $env.'_' : '';
        $this->is_local = config("shopify." . $prefix . "is_local");
    }

    protected $table = 'Product';

    protected $hidden = ['created_at','updated_at','id','Error_msg'];

    protected $fillable = $this->aliasSwitch($is_local);

    protected function aliasSwitch($is_local) {
        if($is_local = true) {
            $fillable = ['Action','Destination'...];
        }
        elseif($is_local = false) {
            $fillable = ['AS4324' => 'Action', 'AS4255' => 'Destination'...];
        }
        return $fillable;
    }

我期望protected $fillable 具有aliasSwitch() 返回的值。我曾尝试将$fillable 设置为不受保护,但出于安全原因我害怕这样做。

【问题讨论】:

  • 我对您的数据库结构有点困惑。您有两个相同型号的表?但是这些表中的列名不同?为什么不将您的别名作为本地化或演示的一部分,从而保留一个表格?
  • @Spholt 两个具有完全不同结构的不同数据库。一个旧的 IBM 和本地开发我们使用 mysql。希望这能解决问题
  • eek :(。好吧,Wahyu 的回答解释了您收到错误的原因。只是一条建议,如果您必须支持那个旧的 IBM 数据库,那么在本地也可以使用一个开发以避免偏离生产环境太远。您最终可能会得到一个脆弱的代码库,它可以在本地工作但不能在生产环境中工作!
  • @Spholt 这正是我所害怕的。我计划从这个过程中学到很多东西。谢谢!

标签: php laravel


【解决方案1】:

类成员变量称为“属性”。您可能还会看到使用“属性”或“字段”等其他术语来提及它们,但出于本参考的目的,我们将使用“属性”。它们是通过使用关键字 public、protected 或 private 之一来定义的,然后是一个普通的变量声明。此声明可能包含一个初始化,但此初始化必须是一个常量值——也就是说,它必须能够在编译时进行评估,并且不能依赖运行时信息才能进行评估。

Source

你需要通过构造函数来定义它:

protected $is_local = true; // default
protected $fillable;

public function __construct(array $attributes = []){
     parent::__construct($attributes);

     $this->fillable = $this->aliasSwitch($this->is_local);
} 

【讨论】:

    猜你喜欢
    • 2012-12-17
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多