繁体   English   中英

Laravel访问器和更改器不适用于Camel Case表字段名称

[英]Laravel Accessors and Mutators not working for Camel Case table fields names

我的表如下所示:

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模型从自定义BaseModel扩展而BaseModel从Eloquent扩展。

Laravel是否没有事件处理程序方法,例如beforeFind(),afterFind(),beforeSave()和afterSave()?

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

public function toArray()
{
    $toArray = parent::toArray();
    $toArray['thumbnailName'] = $this->thumbnailName;
    return $toArray;
}

public function getThumbnailNameAttribute($value)
{
    return self::getThumbnailUrl($value);
}

像魅力一样工作。

访问器/更改器仅在您访问模型的属性时才被调用。 这些属性的用法如下:

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

$image->thumbnail_name = 'foo'; // setThumbnailNameAttribute()

魔术属性名称将是StudlyCase属性名称的snake_case版本。

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

public function getThumbnailNameAttribute($value)
{
    return self::getThumbnailUrl($this->attributes['thumbnailName']);    
}

请注意,您仍然需要调用save()来使更改器所做的更改显示在数据库中。

如果您希望在savingcreatingrestored模型等过程中自动发生某些事情,那么您可以侦听适当的生命周期事件: https : //laravel.com/docs/5.7/eloquent#events

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM