关于远层一对多的问题?

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

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 4

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

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

7年前 评论

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

$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();
7年前 评论
lijinma

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

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

7年前 评论

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

7年前 评论

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