Eloquent:访问模型关系或创建新关系

时间:2016-11-22 00:02:19

标签: php laravel orm eloquent lumen

假设数据库中有2个表:user,appUser(用户有一个appUser和关系已定义)拥有用户ID,为了更新appUser数据,我们可以使用以下代码(如果没有appUser相对模型):

Percent

看起来很好,但是如果我有另一个联系人表(appUser有一个联系人)怎么办,所以为了更新联系人,我们应该添加更多ifs和elses以确保存在appUser和联系人关系。 我的问题是,在laravel eloquent中,加载关系并创建新的,如果不存在有任何简洁的方法吗?

在这种情况下,它会像:

$user = user::find($userID);
if(count($user->appUser) == 0){
    $appUser = new appUser();
    $appUser->column = $value;
    $user->appUser->save();
} else {
    $appUser = $user->appUser;
    $appUser->column = $value;
}
$user->appUser()->save($appUser);

1 个答案:

答案 0 :(得分:2)

从Laravel 5.3.23开始,withDefault关系中添加了一个新的HasOne方法,可以为此提供帮助。

在您的示例中,您的user模型具有以下关系:

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

这样做,如果数据库中没有相关记录,它将返回相关(appUser)类的新实例。所以,你的代码最终看起来像:

$user = user::find($userID);
// if user has an appuser, $user->appUser will return it;
// otherwise, it will return a new instance of your appUser model
$user->appUser->column = $value;
$user->appUser()->save();