В основном моя проблема в том, что мои модели не наследуют необходимые атрибуты от своего суперкласса. Я уже нашел этот вопрос: унаследованные атрибуты равны нулю, что решает ту же проблему . Однако решение не сработало для меня.
Я пробовал, но заполняемые атрибуты просто не установлены. Мои подклассы не имеют доступа к атрибутам.
Может я что-то не так делаю?
Дополнительная информация (не обязательно, я думаю)
Моя ситуация такова: Пользователи (таблица «пользователи») могут быть консультантами (таблица «советники») и/или клиентами (таблица «клиенты»).
Итак, вся общая информация о пользователях; first_name, last_name, ... хранятся в таблице пользователей. Конкретная информация, такая как номер_клиента или функция, хранится в соответствующих таблицах. И консультанты, и клиенты имеют разные отношения, поскольку у них разные роли в приложении.
Я разработал свои модели так, чтобы Advisor и Customer наследуются от суперкласса User:
class User extends Eloquent implements UserInterface, RemindableInterface {
protected $fillable = array('email', 'first_name', 'last_name', 'email', 'gender', 'phone_number', 'profile_picture');
protected $hidden = array('password');
protected $guarded = array('id', 'password');
protected $table = 'users';
...
}
И мой класс советника:
class Advisor extends User {
protected $table = 'advisors';
protected $fillable = array('active', 'function', 'description') ;
//this does not work!
public function __construct (array $attributes = array()) {
// the static function getFillableArray() just returns the fillables array
$this->fillable = array_merge ($this->fillable, parent::getFillableArray());
parent::__construct($attributes);
}
...
}
Я также пытался вызвать конструктор перед установкой заполняемых элементов, как было предложено: этот вопрос . Тоже не работал.
Что действительно сработало, так это написание методов доступа в суперклассе User следующим образом:
// Attribute getters - Inheritence not working
public function getFirstNameAttribute($value)
{
$returnValue = null;
if($value){
$returnValue = $value;
}else{
$returnValue = User::find($this->id)->first_name;
}
return $returnValue;
}
Но это некрасиво, неэффективно и плохо по понятным причинам. Неужели я никак не могу унаследовать эти атрибуты? Что мне не хватает?
заранее спасибо