首页 > 解决方案 > Laravel 6中的雄辩关系。无法修改/覆盖关系属性

问题描述

我在两个 Eloquent 模型之间建立了一对一的关系,我想替换profile_picture在我的UserEloquent 模型中调用的关系属性,但我不知道该怎么做。

这是我的User模型的总结。

class User extends Authenticatable implements JWTSubject{

    use Notifiable;

    public function profile_picture(){
        return $this->hasOne(UserProfilePicture::class);
    }
}

这是我的UserProfilePicture模型的总结。

class UserProfilePicture extends Model{

    public function user(){
        return $this->belongsTo(User::class);
    }
}

这就是我假装在我的UserController文件中这样做的方式。

public function publicUserData($username){

    $user = User::where("username", $username)->with("profile_picture")->first();

    if($user){
        if(!$user->profile_picture){
            $user->profile_picture = UserProfilePicture::$defaultUserProfilePicture;
        }
        return response()->json($user);
    }

    return response()->json(false);
}

这是$defaultUserProfilePicture静态数组。

public static $defaultUserProfilePicture = [
    "url" => "public/avatars/defaultUserPhoto.jpg",
    "size" => 5229
];

我尝试使用突变器,但看起来它不适用于关系属性。

我发现了这个,但对我不起作用。

提前致谢。

标签: phplaraveleloquent

解决方案


您可以为关系默认模型提供属性,您可以将数组或闭包传递给withDefault方法

public function profile_picture(){
    return $this->hasOne(UserProfilePicture::class)->withDefault(UserProfilePicture::$defaultUserProfilePicture);
}

参考:https ://laravel.com/docs/7.x/eloquent-relationships#default-models


推荐阅读