关于远层一对多的问题?

有个投票表votes
有个投票选项表vote_options,拥有 列 vote_id;
投票记录表vote_records,该怎么设计呢,option_id是必须的,但是是否应该加上一个 vote_id呢?
如果没有vote_id 在查看该次投票记录时好麻烦啊

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4

直接 $record->option->vote 不就可以访问了? 预加载的话 with('option.vote')就可以吧

如果想根据 vote 查看投票结果就定义一个 hasManyThrough 关系

8年前 评论

怪我没讲清楚情况,
道理确实如楼上所说,但是现在我这个情况有点特别

$records = Record::all();

我已经列出了所有records了,现在要对这个做查询过滤,加where查询有点麻烦,

// 首先查询,
$votes = Vote::all();
// 根据select出来vote_id,获取所有选项
$options= Vote::find($voteId)->options()->pluck('id');
// where出所有记录
$records = VoteRecord::whereIn('option_id', $options)->get();
8年前 评论
lijinma

@手表大大 看你的代码,应该都是 hasMany 的关系,所以可以直接 $votes->options->records 的,你试试?当然是用 with 进行 eagerLoad 也可以呀。

其实 eagerLoad 就是做了你写的代码,哈哈

8年前 评论

@手表大大 with也能传入回调做查询过滤

8年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!