首页
学习
活动
专区
圈层
工具
发布

突变体
EN

Stack Overflow用户
提问于 2021-02-06 22:52:32
回答 1查看 270关注 0票数 0

我在使用航行者时遇到了一些问题。我可以创建属性的访问器,如文档中所描述的。它可以很好地访问数据,但在保存数据之前,我还必须创建一个Mutator来更改数据。显然,旅行者没有实现它,所以我尝试通过拉威尔式来实现它。它在普通环境中也能很好地工作,但是由于某种原因,旅行者有一个不同的行为

Mutator是在访问器之后调用的,即使仅在浏览时:

代码语言:javascript
复制
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;


class Company extends Model
{
  
  public function setNameAttribute($value){ // my mutator
      $value = preg_replace("/[^a-zA-Z]/", '', $value);
      $this->attributes['name'] = $value;
  }
  public function getNameBrowseAttribute(){ // my accessor
      return $this->name . '...'; // example 
  }

}

发生了什么:

当我访问模型的浏览器时,应该调用getNameBrowseAttribute,但在此之后,setNameAttribute也会被调用,这不应该发生,因为我正在浏览,而不是保存或更新模型。

我尝试调试代码,最后一个名为Voyager的文件是来自voyager/storage/framework/views/的视图,其中$data是模型:

代码语言:javascript
复制
if ($data->{$row->field.'_browse'}) {
   $data->{$row->field} = $data->{$row->field.'_browse'}; // <-- this line
}

如您所见,它是用...browse而不是set...调用方法。

如有任何帮助,我们将不胜感激:)

EN

回答 1

Stack Overflow用户

发布于 2021-11-18 13:40:37

你可以试着处理模型事件。使用保存事件。

https://laravel.com/docs/8.x/eloquent#events

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66082819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档