【发布时间】: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 这正是我所害怕的。我计划从这个过程中学到很多东西。谢谢!