【发布时间】:2015-12-22 19:57:51
【问题描述】:
我有一个约会网站,其数据库如下
country (list of all countries)
-------
id
name
users (It contains all types of users - Super Admin, Fronend user)
-----
id
role_id
name
email
password
country_id
active
user_profile(contains further details of frontend users)
------------
id
user_id
gender_id
photo
status
screenname
headline
location
sign
...and 12 more columns specific to frontend users
gender(specific to genders option - Male, Female, Gay, Prefer Not To Say, etc)
------
id
name
looking_for (pivot between user and gender)
-----------
id
user_id
gender_id
looking_for 是user 和gender 之间的数据透视表。一个用户可以约会多个性别。例如。一位既喜欢与男性约会又喜欢与女性约会的女性。
user 具有 hasOne 和 user_profile
public function profileDetails(){
return $this->hasOne('\App\UserProfile');
}
相反,user_profile 与 user 具有“belongsTo”关系
public function user(){
return $this->belongsTo('\App\User');
}
user_profile 与 gender 有 belongsTo 关系,因为每个用户个人资料都有性别
public function gender(){
return $this->belongsTo('\App\Gender');
}
user 和gender 通过looking_for 具有belongsToMany,因为用户可以将他的约会偏好设置为多种性别。
// User
public function lookingFor(){
return $this->belongsToMany('\App\Gender', 'looking_for')->withTimestamps();
}
//Gender
public function lookedUpBy(){
return $this->belongsToMany('\App\User', 'looking_for')->withTimestamps();
}
现在,我正在尝试创建搜索。
例如。一位女性希望与居住在美国的男性和女性约会。还必须考虑男性和女性(将显示在结果中)已将其looking_for 设置为女性。
首先,我试图获取所有将looking_for 偏好设置为女性的用户。
Gender::with('lookedUpBy')->find($genderIdOfSearchedUser);
如何进一步过滤?
编辑
我已将gender_id 移至users 表,因为它更适合那里。
我也有兴趣表
interests (1-on-1 Dating, Online Friends, Swingers etc)
---------
id
name
以及users 和interests 之间的数据透视表
interest_user
-------------
id
interest_id
user_id
因此,用户可以查找具有相似兴趣的多个性别。
比如说,一位女性希望与居住在美国的男性和女性约会,对 1-on-1 Dating 和 Online Friends 感兴趣
【问题讨论】:
-
为什么性别是一个独立的实体?
-
因为用户可以将其偏好设置为与多种性别约会。
-
这只是我的意见,但我认为没有必要分开。每个用户只有一种性别,因此您可以将
gender放入您的用户表中。您可以添加interests表或类似的东西?!检查en.wikipedia.org/wiki/Database_normalization -
我已经有一个
interests表。请查看更新后的问题。
标签: php mysql laravel eloquent many-to-many