2013-04-07 18 views
5

La mia applicazione è un CMS destinato ai siti Web per le aziende. Ho una tabella chiamata business_info che assomiglia a questo:Migliore pratica eloquente per la tabella tipo coppia chiave/valore

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 

non credo che l'attuale modello di Eloquente lavorerà per gestire in modo efficiente queste informazioni, così ho esteso e iniziato a lavorare su un modello più utile. Mi piacerebbe essere in grado di fare qualcosa di simile:

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

Questo è quello che ho finora, ma non sono sicuro di come procedere:

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

    } 
} 

Forse qualcuno potrebbe offrire alcuni consigli su come procedere o forse un altro approccio? Grazie!

risposta

2

Sei sulla strada giusta, soprattutto con l'override del metodo magico __set. Fondamentalmente, vorrai che questo metodo assomigli a questo modello specifico.

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

che imposta i ei value colonne field ai rispettivi valori quando si fa qualcosa di simile $business_info->zip = "12345";

Per quanto riguarda ottenere tutte le informazioni di business, non si ha realmente vuole solo restituire un array di dati? Potrei forse creare un nuovo metodo per farlo e lasciare tutto com'è. Ma quello che mi sembra va bene.

+1

In laravel 5 ottengo l'eccezione "BadMethodCallException", chiamata al metodo non definito Illuminate \ Database \ Query \ Builder :: set_attribute() '. È rilevante per laravel 5. se non come si fa in laravel 5? –

Problemi correlati