2013-10-25 21 views
7

Sto tentando di cercare una tabella per vedere se esiste una colonna denominata "nome" se così restituisce il valore e se non si crea quella riga con un valore nullo ho visto primaOrCreate ma non riesco a capire come usarlo per la vita di me.Eloquente primaOrCrea documentazione o utilizzo

Questo è quello che ho attualmente, qualcuno può dare una mano?

class Settings extends Eloquent 
     { 
      protected $table = 'settings'; 
      protected $primaryKey = 'name'; 

      public static function get($settingName) 
       { 
        return self::firstOrCreate(array('name' => $settingName)); 
//     return self::select(array('value'))->where('name', '=', $settingName)->first()->value; 
       } 
     } 
+0

Dove vuoi arrivare a seguito di invocare 'Impostazioni :: get ($ SettingName) '? Qualche messaggio di errore? O qualcosa che non ti aspetti? –

+0

Ricevo un nome MassAssignmentException perché il nome che sto tentando di ottenere non esiste –

risposta

10

Il metodo create() fa assegnazione di massa e questo è un problema di grande sicurezza, quindi laravel ha una protezione contro di esso. Internamente ha guarded = ['*'], quindi tutte le tue colonne saranno protette contro l'assegnazione di massa. Avete alcune opzioni:

impostare le colonne compilabili del modello:

class User extends Eloquent { 

    protected $fillable = array('first_name', 'last_name', 'email'); 

} 

o impostare solo quelli che si desidera conservare custodito:

class User extends Eloquent { 

    protected $guarded = array('password'); 

} 

Si può, a proprio rischio anche do:

class User extends Eloquent { 

    protected $guarded = array(); 

} 

E tutto sarà incustodito.

Date un'occhiata alla documentazione: http://laravel.com/docs/eloquent#mass-assignment

Si potrebbe anche usare il vostro Facciata chiamarlo:

class Settings extends Eloquent 
{ 
     protected $table = 'settings'; 
     protected $primaryKey = 'name'; 

     public static function get($settingName) 
     { 
      return Settings::firstOrCreate(array('name' => $settingName)); 
     } 
} 
+0

il problema riscontrato è quando si chiama Settings :: get ('example'); ed esempio di esame non esiste nel database invece di crearlo ricevo un MassAssignmentException di nome –

+0

Anche perché chiamare dalla mia facciata è meglio che usare self ::? –

+0

In effetti, si sta eseguendo l'assegnazione di massa, quindi è necessario aggiungere 'protected $ guarded = [];' al modello, se è necessario assegnarlo a tutte le colonne. –

Problemi correlati