对在这两个表的模型中使用哪种关系感到困惑
confusion over which relationship to use in models for these two tables
我有一个用户 table 包含这些列:
| id | username | password | email | pants_size_id | shirt_size_id |
pants_size_id
和 shirt_size_id
填充了外来的 tables id 键,我在其中存储了不同国家/地区特定尺寸的裤子和衬衫尺寸列表,例如 pants_size
table:
| id | UK_sizing | US_sizing | IT_sizing |
单个用户将只有一个裤子和衬衫尺码,因此用户 table 填充了尺码 tables 中相应行的 ID。
这意味着用户模型与裤子和衬衫尺码模型之间存在何种关系?
另外,当返回授权用户 return \Auth::user();
而不是数字 size_id 时,如何检索外部 table 列(示例 IT_sizing)中的数据?
换句话说,我如何检索说“32”(裤子尺寸)而不是 pants_size_id
(比如说“1”)。
创建一个 function
为 user
模型中的 pants_size
和 shirt_size
建立 hasOne
关系。如果您不希望 Laravel 使用默认键 (see here for details),请务必正确设置 foreign key
和 local key
。
创建 functions
后,您将能够像这样获取有关用户尺寸信息的数据:App\Model\User::find(123)->pants_size->UK_sizing
。 (此示例适用于 ID 为 123 的用户)。
我是这样实现的:
在 USER 模型中:
public function pants_size(){
return $this->belongsTo('App\Pants_size');
}
public function shirt_size(){
return $this->belongsTo('App\Shirt_size');
}
在 Pants_size 和 Shirt_size 型号中:
public function user(){
return $this->hasMany('App\User');
}
最后一个也适用于 hasOne。
我用来检索数据的代码是:
public function index()
{
echo $user = User::find($id);
echo $pants = User::find($id)->pants_size->it_sizing;
echo $shirt = User::find($id)->shirt_size->it_sizing;
}
Cato 的答案是正确的,由于我的代表,我无法准确回复,但从关系的角度来看,您其他答案中的逻辑没有意义。
用户不属于某个尺码,相反,用户有一个尺码。
对我来说,听起来您混淆了外键和本地键分配应该是 User->hasOne(pants_size).
在你的模型中它会是下面的,键的明确性不是很好,但如果你有一些奇怪的东西laravel无法弄清楚这应该有效。
public function pants_size(){
return $this->hasOne('App\Pants_size','id','pants_size_id');
}
public function shirt_size(){
return $this->hasOne('App\Shirt_size','id','shirt_size_id');
}
要回答如何找到尺寸 (32) 的另一个问题,由于您要处理三种不同的测量值,因此您必须在 32 代表的特定测量值上有一个 where 子句,并获取 id。如果您特别想要用户,您可以这样调用 eloquent 查询:
\Auth::User()->pants_size()->(..whatever measurement you want..)
我有一个用户 table 包含这些列:
| id | username | password | email | pants_size_id | shirt_size_id |
pants_size_id
和 shirt_size_id
填充了外来的 tables id 键,我在其中存储了不同国家/地区特定尺寸的裤子和衬衫尺寸列表,例如 pants_size
table:
| id | UK_sizing | US_sizing | IT_sizing |
单个用户将只有一个裤子和衬衫尺码,因此用户 table 填充了尺码 tables 中相应行的 ID。
这意味着用户模型与裤子和衬衫尺码模型之间存在何种关系?
另外,当返回授权用户 return \Auth::user();
而不是数字 size_id 时,如何检索外部 table 列(示例 IT_sizing)中的数据?
换句话说,我如何检索说“32”(裤子尺寸)而不是 pants_size_id
(比如说“1”)。
创建一个 function
为 user
模型中的 pants_size
和 shirt_size
建立 hasOne
关系。如果您不希望 Laravel 使用默认键 (see here for details),请务必正确设置 foreign key
和 local key
。
创建 functions
后,您将能够像这样获取有关用户尺寸信息的数据:App\Model\User::find(123)->pants_size->UK_sizing
。 (此示例适用于 ID 为 123 的用户)。
我是这样实现的:
在 USER 模型中:
public function pants_size(){
return $this->belongsTo('App\Pants_size');
}
public function shirt_size(){
return $this->belongsTo('App\Shirt_size');
}
在 Pants_size 和 Shirt_size 型号中:
public function user(){
return $this->hasMany('App\User');
}
最后一个也适用于 hasOne。
我用来检索数据的代码是:
public function index()
{
echo $user = User::find($id);
echo $pants = User::find($id)->pants_size->it_sizing;
echo $shirt = User::find($id)->shirt_size->it_sizing;
}
Cato 的答案是正确的,由于我的代表,我无法准确回复,但从关系的角度来看,您其他答案中的逻辑没有意义。
用户不属于某个尺码,相反,用户有一个尺码。
对我来说,听起来您混淆了外键和本地键分配应该是 User->hasOne(pants_size).
在你的模型中它会是下面的,键的明确性不是很好,但如果你有一些奇怪的东西laravel无法弄清楚这应该有效。
public function pants_size(){
return $this->hasOne('App\Pants_size','id','pants_size_id');
}
public function shirt_size(){
return $this->hasOne('App\Shirt_size','id','shirt_size_id');
}
要回答如何找到尺寸 (32) 的另一个问题,由于您要处理三种不同的测量值,因此您必须在 32 代表的特定测量值上有一个 where 子句,并获取 id。如果您特别想要用户,您可以这样调用 eloquent 查询:
\Auth::User()->pants_size()->(..whatever measurement you want..)