我的模型中有一些访问器,我想将它们移动到一个特征,但我收到了一个不知道如何修复的错误。请帮助我如何处理。顺便说一句,我是 Laravel 的新手!
这是我的商家模型:
<?php
namespace App\Models\Merchant;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use App\Models\Merchant\BankAccount;
use App\Traits\LabelAccessor;
class Merchant extends Model
{
use HasFactory, SoftDeletes, LabelAccessor;
protected $connection = 'mysql2';
protected $guarded = ['email_verified_at', 'telephone_verified_at', 'rejcted_at',
'profile_verified_at', 'shaparak_verified_at'];
public function bankAccounts()
{
return $this->hasMany('App\Models\Merchant\BankAccount');
}
}
这是我的特点:
<?php
namespace App\Traits;
trait LabelAccessor
{
protected $appends = [
'gender_label', 'merchant_type_label', 'residency_type_label', 'vital_status_label',
'birth_crtfct_series_letter_label'
];
public function getGenderLabelAttribute()
{
$label = '';
switch ($this->gender) {
case '0':
$label = 'زن';
break;
case '1':
$label = 'مرد';
break;
}
return $label;
}
public function getMerchantTypeLabelAttribute()
{
$label = '';
switch ($this->merchant_type) {
case '0':
$label = 'حقیقی';
break;
case '1':
$label = 'حقوقی';
break;
}
return $label;
}
public function getResidencyTypeLabelAttribute()
{
$label = '';
switch ($this->residency_type) {
case '0':
$label = 'ایرانی';
break;
case '1':
$label = 'غیر ایرانی';
break;
}
return $label;
}
public function getVitalStatusLabelAttribute()
{
$label = '';
switch ($this->vital_status) {
case '0':
$label = 'در قید حیات';
break;
case '1':
$label = 'فوت شده';
break;
}
return $label;
}
public function getBirthCrtfctSeriesLetterLabelAttribute()
{
$label = '';
switch ($this->birth_crtfct_series_letter) {
case '0':
$label = 'الف';
break;
case '1':
$label = 'ب';
break;
case '2':
$label = 'ل';
break;
case '3':
$label = 'د';
break;
case '4':
$label = 'ر';
break;
case '5':
$label = '1';
break;
case '6':
$label = '2';
break;
case '7':
$label = '3';
break;
case '8':
$label = '4';
break;
case '9':
$label = '9';
break;
case '10':
$label = '10';
break;
case '11':
$label = '11';
break;
case '12':
$label = 'ش';
break;
}
return $label;
}
}
我收到此错误: Symfony\Component\ErrorHandler\Error\FatalError:Illuminate\Database\Eloquent\Model 和 App\Traits\LabelAccessor 在 App\Models\Merchant\Merchant 的组合中定义相同的属性 ($appends)。然而,定义不同并且被认为是不兼容的。类由文件 C:\xampp\htdocs\milyoona-admin pp\Models\Merchant\Merchant.php 第 11 行组成
发生错误是因为您的
LabelAccessor
特征和 Laravel 的 HasAttributes
特征(默认情况下在 Eloquent
类中使用)都包含 $prepends
属性。这违背了 PHP 特性的本质:
如果一个特征定义了一个属性,那么类不能定义具有相同名称的属性,除非它是兼容的(相同的可见性和初始值),否则会发出致命错误。在 PHP 7.0.0 之前,在类中定义具有与特征中相同的可见性和初始值的属性时,会引发 E_STRICT 通知。
Laracasts 上的 JarekTkaczyk 建议的一种解决方法是在您的特质中使用 getArrayableAppends
方法:
protected function getArrayableAppends()
{
$this->appends = array_unique(array_merge($this->appends, [
'gender_label', 'merchant_type_label', 'residency_type_label', 'vital_status_label',
'birth_crtfct_series_letter_label'
]));
return parent::getArrayableAppends();
}