gpt4 book ai didi

laravel - 如何在特征中配置 Laravel 模型属性?

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

我有一个名为 Multilingual 的特征,它使用模型的 langtranslation_of 属性(另请参阅 https://stackoverflow.com/a/7299777/1453912)来提供多种翻译一个实体。

现在我想在调用 $model->toArray() 时从模型中隐藏 translation_of 字段,最简单的方法是将它添加到$hidden 属性。像这样:

class Model {
use Multilingual;

protected $hidden = ['translation_of'];
}

但为了保持原始模型干净,我想通过使用的特征添加隐藏字段。

我试过:

  1. protected $hidden = ['translation_of']; 添加到特征中,这是不允许的:未定义:属性“hidden”的特征声明与之前的声明不兼容

    而且可扩展性也不是很好(我认为它会被类的 $hidden 属性覆盖……)

  2. 向特征添加引导方法:

    static function bootMultilingual() {
    static::$hidden[] = 'translation_of';
    }

    由于范围的原因,这(正如我所怀疑的)也是不允许的。

有什么干净的方法可以做到这一点吗?

请帮忙!


注意:为了保持动态,我认为可以通过两种方式完成:

  1. 内部:$this->hidden[] = 'translation_of';
  2. 外部:$model->setHidden(array_merge($model->getHidden(), ['translation_of']));

最佳答案

您可以覆盖实际使用 $this->hidden 的方法。那就是 getArrayableItems

trait Multilingual {

protected function getArrayableItems(array $values)
{
if(!in_array('translation_of', $this->hidden)){
$this->hidden[] = 'translation_of';
}
return parent::getArrayableItems($values);
}
}

关于laravel - 如何在特征中配置 Laravel 模型属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27692750/

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