У меня есть модель, которая содержит много методов.
class UserModel extends Eloquent{
private $active;
function __construct() {
$this->active = Config::get('app.ActiveFlag');
}
protected $table = 'User';
protected $fillable = array('usr_ID', 'username');
public function method1(){
//use $active here
}
public function method2(){
//use $active here
}
}
контроллер:
$user = new UserModel($inputall);
$user->save();
Без конструктора все работает нормально. Однако с помощью конструктора он не сохраняет пользователя (сгенерированный запрос не имеет никаких атрибутов или значений заполнения). Запрос выглядит следующим образом:
insert into User() values();
Любые входы, пожалуйста?
Ну да, это потому, что вы переопределяете конструктор Eloquent, который отвечает за заполнение модели значениями при передаче массива. Вы должны передать их родителю с parent::__construct()
:
public function __construct(array $attributes = array()){
parent::__construct($attributes);
$this->active = Config::get('app.ActiveFlag');
}
Конструктор вашей модели не принимает никаких параметров — пусто ()
, и вы создаете новый экземпляр UserModel в вашем контроллере, добавляя $inputall
в качестве параметра.
Попробуйте реорганизовать ваш конструктор в соответствии с этим:
class UserModel extends Eloquent {
public function __construct($attributes = array()) {
parent::__construct($attributes);
// Your additional code here
}
}
(Ответ основан на Другой красноречивый вопрос о конструкторе)