【发布时间】:2023-04-06 08:01:01
【问题描述】:
假设我有一个 User 模型和 Country 模型。 用户最多可以同时拥有四个国家(本国和他想访问的三个国家)。 使用 Eloquent,我将创建一个具有额外类型字段的可旋转 country_user,这将对应于用户的选择、他首先放置的国家等。 所以再一次,有:
User
--id
Country
--id
country_user
--id
--user_id
--country_id
--type
我需要获取所有拥有加拿大作为国家类型 1、英国作为国家类型 2、法国作为国家类型 3 和新西兰作为国家类型 4 的所有用户。如果我理解正确,那么我不能使用 wherePivot 来做到这一点,只有当我得到一个 User::all() 并遍历这个集合(这没有多大意义并且给数据库带来不必要的负载)。 用尽可能少的数据库查询来做到这一点的正确方法是什么? 还是我完全搞错了,应该有另一种方法来完成这项任务?
【问题讨论】:
-
对于您描述的情况,最好在
users上有一个home_country_id,并为“愿望清单”国家/地区保留country_user表(即他们想要访问的国家/地区列表) .您将定义两个关系,public function homeCountry() { return $this->belongsTo(Country::class, 'home_country_id'); }和public function countries() { return $this->hasMany(Country::class); }。 “类型”对于只有 1 可以具有与其他类型不同的类型的用例(如果我理解正确的话)感觉无关紧要。旁注pivot表通常没有id,尽管它是无害的
标签: php mysql laravel eloquent