2013-04-07 3 views
5

Мое приложение - это 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) 
    { 

    } 
} 

Возможно, кто-то может предложить несколько советов о том, как действовать или, возможно, другой подход? Благодаря!

ответ

2

Вы на правильном пути, особенно с переопределением магического метода __set. В принципе, вы захотите, чтобы этот метод выглядел примерно так для этой конкретной модели.

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

Это устанавливает field и value столбцов соответствующих значений, когда вы делаете что-то вроде $business_info->zip = "12345";

Что касается получения все бизнес-информации, действительно ли вы просто хотите, чтобы вернуть массив данных? Возможно, я сделаю новый метод для этого и оставлю все как есть. Но то, что у тебя есть, выглядит хорошо для меня.

+1

В laravel 5 Я получаю исключение «BadMethodCallException», «Вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: set_attribute()». Является ли это релевантным для laravel 5. Если не так, как это сделать в laravel 5? –

 Смежные вопросы

  • Нет связанных вопросов^_^