Intereting Posts
Добавление резервного изображения в цикл специальных настраиваемых полей wordpress как получить результаты поиска от строки до переменной эха Как конвертировать MM / DD / YYYY в YYYY-MM-DD? PHP: печать неопределенных переменных без предупреждения Получение переменной среды в php Безопасность PHP: извлечение PHP-файла с сервера, без обработки Как проверить, является ли объект JSON пустым в PHP? генерировать «предложения» для пользователей на основе относительной информации от других пользователей 301 или 302 Перенаправление с помощью PHP PHP REGEX preg_match_all каждую строку после определенной строки Новая строка ("\ n") в PHP не работает Внедрение Facebook Credits – приложение не отвечает (ошибка синтаксического анализа signed_request при обратном вызове) Почему php's file_get_contents неправильно извлекает json-файлы из xkcd? FILTER_VALIDATE vs Preg_match. Какой из них использовать? PHPMailer – SMTP ERROR: команда паролей не удалась при отправке почты с моего сервера

Унаследованные атрибуты Laravel 4 равны нулю

У меня есть модель, которая наследуется от пакета Toddish \ Verify Laravel ( https://github.com/Toddish/Verify-L4/blob/master/src/Toddish/Verify/Models/User.php )

Все, что я хочу сделать, это добавить некоторые атрибуты:

use Toddish\Verify\Models\User as VerifyUser; class User extends VerifyUser { public function __construct (array $attributes = array()) { parent::__construct($attributes); $this->fillable = array_merge ($this->fillable, array( 'salutation', 'title', 'firstname', 'lastname', 'phonenumber', 'mobilenumber' )); } } 

Когда я запускаю тест:

 class UserTest extends TestCase { public function testUserCreation () { $user = User::create( [ 'username' => 'testusername', 'email' => 'email@test.com', 'password' => 'testpassword', 'salutation' => 'MrTest', 'title' => 'MScTest', 'firstname' => 'Testfirstname', 'lastname' => 'Testlastname', 'phonenumber' => 'testPhoneNumber', 'mobilenumber' => 'testMobileNumber', ] ); $this->assertEquals($user->salutation, 'MrTest'); $this->assertEquals($user->title, 'MScTest'); $this->assertEquals($user->firstname, 'Testfirstname'); $this->assertEquals($user->lastname, 'Testlastname'); $this->assertEquals($user->phonenumber, 'testPhoneNumber'); $this->assertEquals($user->mobilenumber, 'testMobileNumber'); } } 

Я получаю следующее:

 1) UserTest::testUserCreation Failed asserting that 'MrTest' matches expected null. 

Все утверждения возвращают null. Но я проверил и столбцы базы данных существуют. Так почему же этот атрибут null?

РЕДАКТИРОВАТЬ:

Если я поменяю параметры assert:

 $this->assertEquals('MrTest', $this->salutation); 

Я получаю это:

 ErrorException: Undefined property: UserTest::$salutation 

Вам нужно будет переместить заполняемое переопределение, чтобы оно было выше вызова parent::__construct($attributes);

Делая это:

 public function __construct (array $attributes = array()) { $this->fillable = array_merge ($this->fillable, array( 'salutation', 'title', 'firstname', 'lastname', 'phonenumber', 'mobilenumber' )); parent::__construct($attributes); } 

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

[EDIT] Обновленный ответ включает только раздел, который требуется, и добавил некоторое объяснение, почему это так