我有一个突变器,可以将模型的主体转换为所需的翻译格式。
public function getTextAttribute() {
return $this->constructText($this->body); // which does __($key, $value)
}
protected $appends = ['text'];
但是,一旦他们在排队的工作中,无论我尝试什么,我都无法更改语言环境,即使我传递了一个 Eloquent 集合,它也会将它们更改为默认语言环境。
我尝试了什么:
在解雇工作之前,将 $locale 和 $eloquentCollection 传递给工作。
MyEvent::dispatch($collection, $language)
而在我的工作中,
public function __construct($collection, $language)
{
app()->setLocale($language);
// if I log here, it logs the given locale as my current locale
// but as soon as hits the get mutator, it goes back to default locale
}
在我的收藏中,我尝试放置一个属性:
class MyModel extends Model { public $locale = null; }
而在我的工作中,
public function __construct($collection, $language)
{
app()->setLocale($language);
$collection->each(function($item) {
$item->locale = $language;
})
}
并将突变器更改为:
public function getTextAttribute() {
if (!$this->locale) {
$this->locale = app()->getLocale();
}
return $this->constructText($this->body, $this->locale);
// which does __($key, $value, $locale) inside
}
然而,这也不起作用。constructText()
当我在$locale 中登录时- 它也返回默认语言环境。
你有什么办法或解决方法吗?我想到的其他两种可能的解决方法是:
有没有办法防止集合中的 Eloquent 模型发生变异?
有没有办法将雄辩的集合值(包括“文本”)转换为对象(无需连接到实际模型)?所以我可以直接把它交给工作。