我应该在哪个控制器中为处于关系中的模型编写逻辑

In which Controller should I write logic for Models that are in a relationship

我正在与每个都有帖子的用户一起创建博客。自然地,我有一个 UserController、PostController,以及一个 User 和 Post 模型。

User 模型与 Post 模型具有一对多的关系

// User Model
public function posts()
    {
        return $this->hasMany('App\Post');
    }

我想使用

获取特定用户的所有帖子
// UserController or PostController...
$posts = User::find($id)->posts()->get()

我应该在我的 UserController 中写这个逻辑(因为它使用用户模型)还是我应该在我的 PostController 中写这个逻辑(因为它 returns posts)?

在您的模型中 User 放置关系。

public function posts()
{
    return $this->hasMany('App\Post','foreign_key','local_key');
}

在您的 UserControllerPostController 中使用

获取结果
$posts = User::find($id);
foreach($posts->posts as $post)
{
  echo $post->title;
}

您可以在 UserControllerPostController

中的任何位置编写查询
$user = User::with('posts')->whereId($id)->first();
echo '<pre>';
print_r($user->toArray());
exit;

您将获得 user 以及全部 posts

您可以从两个控制器查询。您希望从何处查询关系取决于您希望从何处以及如何获取数据。

例如,如果您在用户个人资料页面上显示与用户相关的帖子以及其他生物数据等,那么您将调用 UserController 中的关系。

另一方面,假设您想在搜索页面上显示与作者相关的帖子,那么最好通过 PostController 中的关系查询帖子。

总之,这是一个基于方便和优化的选择。

实际上,你只需要像你那样创建关系,然后你就可以在任何地方调用它,就像你描述的那样,User::find($id)->posts()->get()

因此,如果您需要 return 用户的 post 视图,例如,您可以在 UserController 上执行类似的操作:

public function postsView(User $user)
{
    $posts = $user->posts()->get();
    return view('user.posts', compact('posts'));
}

此外,如果您想要反过来(了解 post 背后的用户是谁),您可以使用 belongsTo() 在 Post 模型上创建关系。

// Post Model
public function user()
{
    return $this->belongsTo('App\User');
}