Php Laravel访问器和变异器不适用于Camel Case表字段名称

Php Laravel访问器和变异器不适用于Camel Case表字段名称,php,laravel,eloquent,accessor,mutators,Php,Laravel,Eloquent,Accessor,Mutators,我的桌子如下所示: CREATE TABLE IF NOT EXISTS `ProductCategoryImage` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `productCategoryId` INT(11) NOT NULL, `imageName` VARCHAR(255) NOT NULL, `thumbnailName` VARCHAR(255) NULL DEFAULT NULL, `location` TINY

我的桌子如下所示:

CREATE TABLE IF NOT EXISTS `ProductCategoryImage` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,  
  `productCategoryId` INT(11) NOT NULL,
  `imageName` VARCHAR(255) NOT NULL,  
  `thumbnailName` VARCHAR(255) NULL DEFAULT NULL,
  `location` TINYINT(2) NOT NULL DEFAULT 1,
  `status` TINYINT(2) NOT NULL DEFAULT 1,
  `createdAt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updatedAt` TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `deletedAt` DATETIME NULL DEFAULT NULL,
  `createdById` INT(11) NOT NULL DEFAULT -1,
  `updatedById` INT(11) NULL DEFAULT NULL,
  `deletedById` INT(11) NULL DEFAULT NULL
);
在ProductCategoryImage模型中,我写下了以下两种方法:

public function getThumbnailNameAttribute($value)
{
    return self::getThumbnailUrl($value);    
}
public function setThumbnailNameAttribute($value)
{
    $this->attributes['thumbnailName'] = $value;
}
Laravel不会执行上述两种方法来自定义我的表字段值

ProductCategoryImage模型从CustomBaseModel扩展而来,BaseModel从Elount扩展而来


Laravel是否有beforeFind()、afterFind()、beforeSave()、afterSave()等事件处理程序方法?

只有在访问模型上的属性时才会调用访问器/变异器。这些属性的使用方式如下:

$name = $image->thumbnail_name; // getThumbnailNameAttribute()

$image->thumbnail_name = 'foo'; // setThumbnailNameAttribute()
魔法属性名称将是StudlyCase属性名称的snake\u case版本

由于访问者的属性名不是
缩略图\u name
,因此Laravel不会自动找到原始值。您可以直接从模型的属性数组中获取它:

public function getThumbnailNameAttribute($value)
{
    return self::getThumbnailUrl($this->attributes['thumbnailName']);    
}
请注意,您仍然需要调用
save()
,以使mutator所做的更改显示在数据库中


如果希望在模型
保存
创建
恢复
等时自动发生某些事情,则可以侦听相应的生命周期事件:

只有在访问模型上的属性时才会调用访问器/变异器。这些属性的使用方式如下:

$name = $image->thumbnail_name; // getThumbnailNameAttribute()

$image->thumbnail_name = 'foo'; // setThumbnailNameAttribute()
魔法属性名称将是StudlyCase属性名称的snake\u case版本

由于访问者的属性名不是
缩略图\u name
,因此Laravel不会自动找到原始值。您可以直接从模型的属性数组中获取它:

public function getThumbnailNameAttribute($value)
{
    return self::getThumbnailUrl($this->attributes['thumbnailName']);    
}
请注意,您仍然需要调用
save()
,以使mutator所做的更改显示在数据库中


如果您希望在模型
保存
创建
恢复
等时自动发生某些事情,则可以侦听相应的生命周期事件:

我的一位团队成员使用toArray()方法实现了它:


工作很有魅力。

我的一名团队成员使用toArray()方法实现了这一目标:


工作很有魅力。

我将尝试您的解决方案并向您提供最新信息。非常感谢您的快速回复。我将尝试您的解决方案并向您提供最新信息。非常感谢您的快速回复。