Laravel 5-更新模型不会立即更新关系


Laravel 5 - Updating model does not update relationships immediately

我今天在尝试用简单的hasOne关系更新模型时遇到了一个有趣的问题。我在做以下事情:

public function update(MyRequest $request, $id)
{
    $project = Project::find($id);
    $data = $request->all(); //has a client_id
    $project->update($data);
    return $project->client; //Project model holds this hasOne relationship
}

问题是从update函数返回的$project->client仍然是客户端的旧版本。$project->update(...)不应该刷新这些关系吗?我们现在使用的代码是:

public function update(MyRequest $request, $id)
{
    $project = Project::find($id);
    $data = $request->all(); //has a client_id
    $client = Client::find($data['client_id']);
    $project->update($data);
    $project->client()->associate($client);
    return $project->client; //Project model holds this hasOne relationship
}

在这一点上,我们都很好。那么,函数的更新版本是正确的方法吗(IE获得客户端对象的刷新版本(?

更新后只保存模型:

$project->update($data);
$project->save();
return $project->client; 
$project->update($data);
$project->save();
return $project->client;

这不会返回更新的客户端

要获得更新的客户端,您需要刷新模型

$project->update($data);
$project->save();
$project = $project->fresh();
return $project->client;

现在您将获得更新的客户端