5

私のアプリケーションは、企業向けの Web サイト向けの 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)
    {

    }
}

おそらく、誰かが続行方法や別のアプローチについてアドバイスを提供できますか? ありがとう!

4

1 に答える 1

2

特に__setマジックメソッドをオーバーライドすることで、正しい軌道に乗っています。基本的に、この特定のモデルでは、そのメソッドを次のようにする必要があります。

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

field次のようなことをすると、列とvalue列がそれぞれの値に設定されます$business_info->zip = "12345";

すべてのビジネス情報を取得することに関しては、本当にデータの配列を返したいだけですか? 私はおそらくそれを行うための新しい方法を作成し、すべてをそのままにしておくでしょう. しかし、あなたが持っているものは私にはうまく見えます。

于 2013-04-10T23:57:13.430 に答える