你需要一组文章内容,还需要跟这组文章相关的数据,比如文章的作者。为了减小对数据库查询的次数,可以使用 EagerLoading,名字挺吓人,不过用起来非常简单。现在我们就去试一下这个东西 ..
先打开 Post ,文章模型 ... 在这个模型里面添加一个 user 方法 .. 然后在这个方法里用一下 this.belongsTo .. 模型是 App/Models/User ..
这样我们就可以在 post 模型上,使用 user 方法来得到文章的作者了 ..
再打开文章资源的控制器 .. 就是这个 PostController .. 它里面的 index 方法渲染了一个视图,上面会显示从数据库里查询出来的一组文章内容 ..
先去预览一下 ... 打开浏览器 ... 访问一下 posts 这个地址 ... 这里会显示一组文章内容 ..
再回到文章资源控制器 .. 改造一下 index 方法里的东西 .. 这里先用一下 Post ... query() .. 这样我们就可以使用 Query Builder 上的方法了 ..
我需要文章相关的用户 .. 可以使用 with 这个方法 .. 关系的名字是 user .. 这里用的就是我们说的 EagerLoading ..
最后再用一个 fetch .. 提取需要的数据 ..
下面用一个 console.log .. 输出 posts.toJSON() ..
回到浏览器 ... 刷新一下 posts 这个页面 ...
再回到运行项目用的这个命令行标签 .. 这里会显示从数据库里查询出来的文章内容 .. 每个项目里面现在会有一个 user 属性,里面的东西就是跟文章相关联的用户数据 .. 现在这里会包含用户的所有数据,如果只需要指定的字段,可以再去处理一下 ..
找到这个 with 方法 .. 设置一下它的第二个参数 .. 一个回调函数 .. 接收一个 builder 参数 .. 这样我们就可以在这个方法里面,用一下 Query Builder 提供的方法了 ..
这里用一下它的 select ... 选择一下需要的字段 .. 一个是 id ... 还有一个 username ...
回到浏览器 ... 刷新 posts 页面 ... 再回到命令行 ...
这次你会发现, 文章项目里的 user 属性里的东西,现在只会包含 id 还有 username ...
视图
回到项目 .. 找到文章列表使用的视图 .. resources ... views .. post .. index.edge ..
在内容正文的下面,可以显示这个内容的作者 .. 一个 div .. 加上点样式 .. text-muted .. mt-2
里面绑定输出的是 post.user.username
回到浏览器 ... 再看一下这个内容列表页面 ... 现在这里每个内容项目的下面都会显示这个内容的作者的名字 ...