gpt4 book ai didi

inheritance - 从 Eloquent 模型继承的属性在 Laravel 4 中为空

转载 作者:行者123 更新时间:2023-12-01 05:12:39 25 4
gpt4 key购买 nike

基本上我的问题是我的模型没有从他们的父类(super class)继承所需的属性。我已经找到了这个问题:inherited attributes are null ,解决了同样的问题。但是,该解决方案对我不起作用。

我试过了,但可填充的属性没有设置。我的子类无权访问这些属性。

也许我做错了什么?

额外信息(我猜不是必需的)

我的情况是这样的:用户(表“用户”)可以是顾问(表“顾问”)和/或客户(表“客户”)。

所有关于用户的一般信息; first_name, last_name, ... 存储在 users 表中。特定信息如 customer_number 或函数存储在适当的表中。顾问和客户都有不同的关系,因为他们在应用程序中扮演不同的角色。

我设计了我的模型,以便 Advisor 和 Customer 从父类(super class) 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);
}
...
}

我还尝试在设置可填充物之前调用构造函数,如以下建议的: this question .也没有工作。

有效的是在 User 父类(super class)中编写访问器,如下所示:
// 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;
}

但由于显而易见的原因,这很丑陋,效率低下而且很糟糕。
我真的没有办法继承这些属性吗?我错过了什么?

提前致谢

最佳答案

由于您在数据库中设计了单表继承结构,因此您可以使用另一种解决问题的方法,您可以使用此处解释的 Laravel eloquent 关系函数:http://laravel.com/docs/eloquent#relationships .这将允许您访问父类(super class)的属性,例如:

//in your Advisor model
public function profile()
{
return $this->belongsTo('User');
}

//to call for advisor's first name
Advisor::find($id)->profile->first_name;

关于inheritance - 从 Eloquent 模型继承的属性在 Laravel 4 中为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23501981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com