我有一个相当庞大的代码库。其中有几个表和匹配的Eloquent模型,用于以“### 街道,城市,ST,xzipx”的形式存储地址。这些由单个varchar字段称为“address”在数据库中表示。
现在我的问题是,我想添加一个新功能,允许通过它们是否位于同一城市、州等来比较项目。根据当前配置,要做到这一点的方法是对地址字符串进行标记化。这很好,但每次都要这样做有点烦人。
理想的解决方案是重新构造数据库和相关模型,将“address”字段拆分为“street”、“city”、“state”和“zip”。唯一的问题是,其他地方我正在使用“$model->address”访问地址,那么我必须从这些部分构建它。这在整个代码中经常发生,所以即使创建以下帮助函数:
要求替换所有实例的
现在我的问题是,我想添加一个新功能,允许通过它们是否位于同一城市、州等来比较项目。根据当前配置,要做到这一点的方法是对地址字符串进行标记化。这很好,但每次都要这样做有点烦人。
理想的解决方案是重新构造数据库和相关模型,将“address”字段拆分为“street”、“city”、“state”和“zip”。唯一的问题是,其他地方我正在使用“$model->address”访问地址,那么我必须从这些部分构建它。这在整个代码中经常发生,所以即使创建以下帮助函数:
public function address(){
return $this->street.", ".$this->city.", ".$this->state." ".$this->zip;
}
要求替换所有实例的
$model->address
为 $model->address()
,但这仍然很麻烦。理想的解决方案是创建一个动态属性,就像 Laravel 用于关系一样。这是否可能?还有更好的解决方案吗?
setAddressProperty()
,这样调用$model->address = BLAHBLAHBLAH; $model->save();
将解析我传递的内容并将其存储在单独的字段中? - ewokModel::where('address','=','whatever');
。 - ewok