2014-10-25 3 views
5

Возможно, я делаю что-то неправильно, но я иду из мира PDO, и я привык передавать аргументы классу, в который была создана строка, а затем этот конструктор будет устанавливать поле для меня динамически. Как это достигается с помощью «Красноречивого»?Передача атрибута конструктору модели Eloquent

// Old way 

$dm = new DataModel('value'); 

DataModel.php

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

Я читал, что Eloquent предоставляет метод ::create(), но я не хочу, чтобы сохранить запись на этом этапе.

Проблема здесь в том, что у Eloquent есть свой собственный конструктор, и я не уверен, что моя модель полностью переопределит этот конструктор.

ответ

9

Вы можете добавить к вашей модели:

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

    parent::__construct($attributes); 
} 

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

+0

Большое спасибо, сработало очень хорошо! – silkfire

4

Я считаю, что вы ищете вещи Laravel вызовы массового назначения

Вы просто определить массив заполняемых свойств, которые вы затем может перейти в, при создании нового объекта. Не нужно переопределять конструктор!

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

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

Для получения дополнительной информации посмотрите на старый формат конструктора official docs

+0

Мое свойство не существует как столбец в таблице, вот почему. в C# я думаю, что это будет называться виртуальным свойством – silkfire

+0

Эквивалент [ссылка Laravel 5] (https://laravel.com/docs/5.5/eloquent#mass-assignment) – Dan

0

:

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

     $this->value = $value; 

    } 

новый формат:

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

    $this->value = $value; 
} 
Смежные вопросы