如何在laravel模型中设置附加变量?

时间:2018-04-26 08:21:54

标签: php laravel

我在Laravel做项目。我的模型名为'User.php',这里我想设置$ appends变量取决于条件。 在数据库中,我以key属性格式存储了值。 例如:

  • 我有一个名为'user'的表格,其中包含姓名,电子邮件和手机号码等基本信息。

  • 其他名为'user_attributes_master'的表,其中包含“avatar”,“theme”等列。

  • 和其他名为'user_attribute_values'的表,其中包含'id','user_id'和'att_id'等列(这是user_attributes_master表的主键)

user.php看起来像

class User extends Authenticatable
{
protected $appends = ['avatar_photo'];

public function profile_attributes()
    {
        return $this->belongsToMany(\App\Models\Access\User\UserProfileAttributes::class,config('access.user_attribute_values_table'),'user_id','user_attribute_id')->withPivot('value', 'active')->withTimestamps();
    }

/**
     * @return string
     */
    public function getAvatarPhotoAttribute()
    {
        $avatar = $this->profile_attributes()->where('user_attributes_master.id',7)->first()->avatar_path;
        return $avatar;

    }
}

这里我得到了每个记录的avatar_path属性,这是我设置为profile.php模型的追加变量。如何只使用profile.php的'avatar'col。如何设置此追加变量。

属性模型包含代码,

protected $appends = ['avatar_path','theme_path'];

public function getAvatarPathAttribute()
    {
            return $this->pivot->value != null ? config('app.url').'/'.config('profile.images.user_images'). "/" . $this->pivot->user_id ."/" . config("profile.images.avatar")."/".$this->pivot->value : '';

    }

在这里,我不希望每个属性都使用'avatar_path'。

2 个答案:

答案 0 :(得分:2)

您可以使用appends()$appends动态添加属性。试试这个:

$attributes->where('pivot.value', '!=', null)->each->appends('avatar_path');

答案 1 :(得分:0)

重命名:protected $appends = ['avatar_photo'];

至:'protected $appends = ['avatarphoto'];'