2014-10-25 12 views
5

Forse sto facendo le cose sbagliate, ma vengo dal mondo di PDO e sono abituato a essere in grado di passare argomenti a una classe in cui una riga viene istanziata e quindi quel costruttore imposterà dinamicamente un campo per me. Come si raggiunge questo risultato con Eloquent?Passaggio di un attributo a Eloquent model constructor

// Old way 

$dm = new DataModel('value'); 

DataModel.php

class DataModel() { 
    function __construct($value = null) { 
     $this->value = $value; 
    } 
} 

Ho letto che Eloquente fornisce un metodo ::create() ma io non voglio salvare il record in questa fase.

Il problema qui è che Eloquent ha il proprio costruttore e non sono sicuro che il mio modello possa ignorare completamente il costruttore.

risposta

9

È possibile aggiungere al modello:

public function __construct($value = null, array $attributes = array()) 
{ 
    $this->value = $value; 

    parent::__construct($attributes); 
} 

questo farà quello che vuoi e costruttore di lancio genitore.

+0

ringrazio molto, ha funzionato abbastanza bene! – silkfire

4

credo siete alla ricerca di una cosa laravel chiama Assegnazione di massa

È sufficiente definire una serie di proprietà compilabili, che si è poi in grado di passare in, quando si crea un nuovo oggetto. Non c'è bisogno di scavalcare il costruttore!

class DataModel extends Eloquent { 
    protected $fillable = array('value'); 
} 

$dataModel = new DataModel(array(
    'value' => 'test' 
)); 

Per maggiori informazioni date un'occhiata al vecchio formato costruttore official docs

+0

la mia proprietà non esiste come colonna nella tabella, ecco perché. in C# penso che si chiamerebbe proprietà 'virtuale' – silkfire

+0

Equivalente [collegamento Laravel 5] (https://laravel.com/docs/5.5/eloquent#mass-assignment) – Dan

0

:

protected $value; 
public function __construct($value = null) 
    { 

     $this->value = $value; 

    } 

nuovo formato:

protected $value;  
public function __construct(array $attributes = array(), $value =null) 
{ 
    /* override your model constructor */ 
    parent::__construct($attributes); 

    $this->value = $value; 
} 
Problemi correlati