hpa*_*nia 1 php orm laravel eloquent lumen
假设数据库中有2个表:user,appUser(用户有一个appUser并定义了关系)有了用户id,为了更新appUser数据,我们可以使用以下代码(如果没有appUser相关模型):
$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);
Run Code Online (Sandbox Code Playgroud)
看起来不错,但如果我有另一个联系人表(appUser 有一个联系人)怎么办,因此为了更新联系人,我们应该添加更多的 if 和 else 以确保 appUser 和联系人关系存在。我的问题是,是否有任何简洁的方法来加载关系并创建新的关系(如果laravel eloquent 中不存在) ?
在这种情况下,它会是这样的:
$user = user::find($userID);
// No Exception!
$user->appUser->column = $value;
$user->appUser->save();
Run Code Online (Sandbox Code Playgroud)
从 Laravel 5.3.23 开始,关系withDefault中添加了一种新方法HasOne,应该有助于解决此问题。
在您的示例中,您的user模型将具有以下关系:
public function appUser() {
return $this->hasOne(appUser::class)->withDefault();
}
Run Code Online (Sandbox Code Playgroud)
这样做的目的是,如果数据库中没有相关记录,它将返回相关 ( 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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1304 次 |
| 最近记录: |