gpt4 book ai didi

php - Laravel Route 模型与关系绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 00:30:50 25 4
gpt4 key购买 nike

我想知道是否可以返回与 Laravels Route 模型绑定(bind)的关系?

假设有一个与其他用户有“ friend ”关系的用户模型,我想从路由或 Controller 返回用户信息和关系。

例如路由domain.tld/user/123

Route::model('user', 'User');

Route::get('/user/{user}', function(User $user) {

return Response::json($user);

});

这将返回我的用户信息,但我也想要关系,有没有简单/正确的方法可以做到这一点?

我知道我能做到

Route::get('/user/{user}', function((User $user) {

return Response::json(User::find($user['id'])->with('friends')->get());

});

Route::get('/user/{id}', function(($id) {

return Response::json(User::find($id)->with('friends')->get());

});

但我怀疑可能有更好的方法。

最佳答案

您不想在每个查询上急切加载关系,例如 Matt Burrow建议,只是为了让它在一种情况下可用。这是低效的。

相反,在 Controller 操作中,您可以在需要时“按需”加载关系。因此,如果您使用路由模型绑定(bind)为 Controller 操作提供 User 实例,但您还需要 friends 关系,则可以执行以下操作:

class UserController extends Controller
{
public function show(User $user)
{
$user->load('friends');

return view('user.show', compact('user'));
}
}

编辑:您还可以使用 loadMissing 有条件地加载关系。如果关系尚未加载到模型上,这只会加载关系:

class UserController extends Controller
{
public function show(User $user)
{
// If friends relation has already been loaded, will be a no-op
$user->loadMissing('friends');

return view('user.show', compact('user'));
}
}

关于php - Laravel Route 模型与关系绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26888736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com