键/值对类型表的雄辩最佳实践

时间:2013-04-07 00:19:20

标签: database-design orm 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

我认为当前的Eloquent模型不会有效地管理这些信息,因此我对其进行了扩展并开始研究更有用的模型。我希望能够做到这样的事情:

$business_info->zip = "66666";
$business_info->save();

这是我到目前为止所做的,但我不确定如何继续:

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)
    {

    }
}

也许有人可以提供一些关于如何继续或可能采用其他方法的建议?谢谢!

1 个答案:

答案 0 :(得分:2)

你走在正确的轨道上,尤其是覆盖了__set魔法。基本上,您希望该方法对于此特定模型看起来像这样。

public function __set($key, $value)
{
    $this->set_attribute('field', $key);
    $this->set_attribute('value', $value);
}

当您执行field

之类的操作时,会将value$business_info->zip = "12345";列设置为各自的值

至于获取所有业务信息,您真的只想返回一组数据吗?我也许会为这样做做一个新的方法并保持原样。但你所拥有的东西对我来说很好。