2013-04-07 36 views
5

Ứng dụng của tôi là một CMS dành cho các trang web dành cho doanh nghiệp. Tôi có một bảng gọi là business_info trông như thế này:Thực hành tốt nhất cho bảng loại cặp khóa/giá trị

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 

Tôi không nghĩ rằng mô hình hùng biện hiện nay sẽ làm việc để quản lý hiệu quả thông tin này, vì vậy tôi mở rộng nó và bắt đầu làm việc trên một mô hình hữu ích hơn. Tôi muốn để có thể làm điều gì đó như:

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

Đây là những gì tôi có cho đến nay, nhưng tôi không chắc chắn làm thế nào để tiến hành:

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

    } 
} 

Có lẽ ai đó có thể cung cấp một số lời khuyên về cách tiến hành hoặc có lẽ cách tiếp cận khác? Cảm ơn!

Trả lời

2

Bạn đang đi đúng hướng, đặc biệt với việc ghi đè phương pháp ma thuật __set. Về cơ bản, bạn sẽ muốn phương thức đó giống như thế này cho mô hình cụ thể này.

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

Đó đặt và value cột field với các giá trị tương ứng của họ khi bạn làm điều gì đó như $business_info->zip = "12345";

Như để nhận tất cả các thông tin kinh doanh, bạn có thực sự chỉ muốn trả về một mảng dữ liệu? Tôi có lẽ sẽ làm một phương pháp mới để làm điều đó và để lại tất cả như nó được. Nhưng những gì bạn đã có vẻ tốt với tôi.

+1

Trong laravel 5, tôi nhận được ngoại lệ 'BadMethodCallException', 'Gọi đến phương thức undefined Illuminate \ Database \ Query \ Builder :: set_attribute()'. Đây có phải là liên quan cho laravel 5. nếu không làm thế nào để làm điều này trong laravel 5? –