Я пытаюсь заставить собственный конструктор работать с моделью, расширяющей модель Eloquent в Laravel 5.4.
Я уже уверен, что вызвал родительский конструктор, но кажется, что ничто из того, что я делаю, не дает никакого эффекта после этого.
Вот моя функция __construct:
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
$this->users();
}
А вот метод users ():
public function users()
{
$this->users = collect();
foreach($this->employees as $employee) {
$this->users = $this->users->push($employee->user);
}
$this->users = $this->users->unique();
}
В этом примере employee — это класс, который связывает пользователя с магазином, а также определяет его работу. Однако не имеет значения, что я пытаюсь назначить. Я также попытался просто назначить переменную мусора в конструкторе с
$this->foo = 'bar';
или даже пытаясь перезаписать атрибут, такой как
$this->name = 'foobar';
но безрезультатно. Я также попытался просто изменить порядок кода, вызывающего parent :: __ construct (), до или после моего кода, и ничего не изменилось.
Любая помощь будет принята с благодарностью!
Если изменения в вашем дочернем классе не отображаются, даже когда вы загружаете в него мусор, мне кажется, что вы не загружаете нужный класс в контекст?
Возможно, проверьте ваш use
операторы в верхней части, чтобы убедиться, что вы загрузили дочерний класс, а не родительский. Было бы легко не заметить, так как они используют один и тот же интерфейс, по сути, никакая синтаксическая ошибка не будет вызвана.
Если все в порядке, то я бы проверил в журналах что-нибудь подозрительное (например, сообщения об ошибках, связанных с функцией).
Также очень полезно использовать dd()
Функция вдоль цепочки выполнения, чтобы увидеть тип и содержимое ваших переменных. Вы можете обнаружить, что это было переопределено в некоторый неожиданный момент.
В общем, я идиот. Функциональность конструктора работала отлично. Моя проблема заключалась в том, что я пытался установить атрибуты не для нового экземпляра класса, а после его извлечения, что сработало лучше, просто используя методы getAttribute.
Спасибо всем за попытку помочь, но я был просто тупым.