几个小时前我发布了一个相关问题,但我不明白为什么 Laravel eloquent 如此复杂......我再次阅读了很多关于这个主题的帖子,但没有人给我一个非常简单的请求的解决方案。
这是一个帖子仅属于一篇文章和一个用户的简单示例。所以关系在 Post 模型中定义如下:
public function article()
{
return $this->belongsTo(Article::class);
}
public function user()
{
return $this->belongsTo(User::class);
}
我对 Laravel eloquent 很陌生......所以我只想根据上面模型中定义的关系显示所有帖子的列表,其中包含他们的 id、评论和相关的用户名和文章标题。我相信这很简单,我今天才学会了“with”。
所以在 PostController 中,我有:
$posts = Post::orderBy($sortField,$sortOrder)
->with(['article','user'])
->get();
这给了我一个包含所有帖子的集合。
第一个问题,我是否必须以使它们在下面的列表视图中易于访问的方式来操作 2 个相关字段?或者我可以通过将它放在查询中来避免控制器中的这种情况吗?
foreach ($posts as $post) {
$post->article = $post->article()->pluck('article');
$post->user = $post->user()->pluck('name');
}
在上面,字段 $post->article 列出了数组中的所有文章标题(文章字段)。
如果我在最后添加 [0],我会得到数组的第一个元素。
如果我使用 [post->article_id],我会得到错误的相关标题。
所以没有什么能按我想要的方式工作......为什么这么复杂???
最终,这是我需要在列表视图中做的事情。
@foreach ($posts as $post)
<p>{{ $post->id }} : {{ $post->comment }} by {{ $post->name }} from article {{ $post->article }}</p>
@endforeach
通过在查询生成器中进行查询,我立即得到我想要的......那么如何在 eloquent 中做同样的事情?
$users = DB::table('posts')
->join('articles', 'articles.id', '=', 'posts.user_id')
->join('users', 'users.id', '=', 'posts.user_id')
->select('users.*', 'articles.article', 'users.name')
->get();