gpt4 book ai didi

php - Eloquent Laravel 模型上的 __construct

转载 作者:IT王子 更新时间:2023-10-29 00:14:12 27 4
gpt4 key购买 nike

我有一个自定义 setter,我在模型的 __construct 方法中运行。

这是我要设置的属性。

    protected $directory;

我的构造函数

    public function __construct()
{
$this->directory = $this->setDirectory();
}

二传手:

    public function setDirectory()
{
if(!is_null($this->student_id)){
return $this->student_id;
}else{
return 'applicant_' . $this->applicant_id;
}
}

我的问题是在我的 setter 中,$this->student_id(这是从数据库中提取的模型的一个属性)返回 null。当我从 setter 中 dd($this) 时,我注意到我的 #attributes:[] 是一个空数组。
因此,直到 __construct() 被触发后,模型的属性才会被设置。如何在我的构造方法中设置我的 $directory 属性?

最佳答案

您需要将构造函数更改为:

public function __construct(array $attributes = array())
{
parent::__construct($attributes);

$this->directory = $this->setDirectory();
}

第一行 (parent::__construct()) 将在您的代码运行之前运行 Eloquent Model 自己的构造方法,这将设置所有属性为你。此外,对构造函数方法签名的更改是为了继续支持 Laravel 期望的用法:$model = new Post(['id' => 5, 'title' => 'My Post']);

经验法则是永远记住,当扩展一个类时,要检查你没有覆盖一个现有的方法,这样它就不再运行(这对于神奇的 __construct 尤其重要>、__get 等方法)。您可以检查原始文件的来源,看看它是否包含您正在定义的方法。

关于php - Eloquent Laravel 模型上的 __construct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30502922/

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