Yev*_*Yev 5 orm database-design laravel eloquent laravel-3
我的应用程序是用于企业网站的CMS.我有一个名为business_info的表,如下所示:
id | field | value
-----------------------------------------
1 | name | Testing Company
2 | official name | Testing Company LLC
3 | main_location | The Bay Area
4 | year | 1999
5 | address | 55 Street Rd
6 | suite | Unit 5
7 | city | Anytown
8 | state | CA
9 | zip | 55555
10 | tollfree | 1(888) 555-5555
Run Code Online (Sandbox Code Playgroud)
我不认为当前的Eloquent模型能够有效地管理这些信息,所以我扩展了它并开始研究一个更有用的模型.我希望能够做到这样的事情:
$business_info->zip = "66666";
$business_info->save();
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止,但我不知道如何继续:
class Business_Info extends Eloquent
{
public static $table = 'business_info';
public static function all()
{
$business_info_rows = with(new static)->query()->get();
foreach ($business_info_rows as $business_info_row)
{
$business_info[$business_info_row->attributes['field']] = $business_info_row->attributes['value'];
}
return $business_info;
}
public function __set($key, $value)
{
}
}
Run Code Online (Sandbox Code Playgroud)
也许有人可以提供一些关于如何继续或可能采取其他方法的建议?谢谢!
您走在正确的道路上,尤其是在覆盖__set魔术方法方面。基本上,对于这个特定模型,您会希望该方法看起来像这样。
public function __set($key, $value)
{
$this->set_attribute('field', $key);
$this->set_attribute('value', $value);
}
Run Code Online (Sandbox Code Playgroud)
当您执行类似操作时,将field和value列设置为其各自的值$business_info->zip = "12345";
至于获取所有的业务信息,你真的只想返回一个数据数组吗?我也许会制定一种新方法来做到这一点,并保持原样。但你所拥有的对我来说看起来不错。