首页 > 解决方案 > setrelation 方法在 laravel 中不起作用

问题描述

我的用户关系是:

    public function country()
    {
        return $this->belongsTo(Country::class);
    }

查询是:

  $user = User::with('country')->first();

我想检查国家是否为空,将其替换为默认数据或其他任何内容

所以首先我尝试这样:

if(empty($user->country)){
$user->country = "some default value";
}

搜索后它没有用我试试这个:

if(empty($user->country)){
$user->setRelation('country' , 'some default value');
}

再次它对我不起作用。"setRelation" 删除用户对象中的国家键

标签: phplaraveleloquent

解决方案


relation如果在 eloquent result key中接收到空/null ,那么 setdefaultOject可以设置如下:

对于单一关系:

$modelInstance = $modelInstance->setRelation('relationName', $relationModelObject)

对于多重关系:

$modelInstance = $modelInstance->setRelation('relationName', collect([$relationModelObject]))

多重关系示例:

$defaultMedia = new Media;
$defaultMedia->id = 0;
$defaultMedia->file_name = 'defaultImage.jpg';

$result = Post::with('media')->get();

$result->transform(function ($post, $key) use($defaultMedia) {
    if($post->media->count() == 0) {
        $post->setRelation('media', collect([$defaultMedia]));
    }
    return $post;
});

return $result;

现在,最终$result您将$defaultMediarelation返回时得到null


推荐阅读