我有一个包含以下列的用户表:
| id | username | password | email | pants_size_id | shirt_size_id |
pants_size_id
和shirt_size_id
填充了外国表ID键,其中我存储了不同国家特定度量的裤子和衬衫的大小列表,例如pants_size
表:
| id | UK_sizing | US_sizing | IT_sizing |
单个用户只有一条裤子和衬衫尺码,因此用户表格中填充了尺寸表中相应行的ID。
在用户模型和裤子和衬衫尺码模型之间实现了什么样的关系?
在返回auth用户return \Auth::user();
而不是数字size_id时,如何检索外表列中的数据(例如IT_sizing)?
换句话说,我怎样才能找回说' 32' (裤子大小)而不是pants_size_id
(让我们说' 1')。
答案 0 :(得分:1)
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..)
答案 1 :(得分:0)
为function
模型中的hasOne
和pants_size
创建shirt_size
建立user
关系。如果您不希望Laravel采用默认密钥(see here for details),请务必正确设置foreign key
和local key
。
创建functions
后,您将能够获取有关用户尺寸信息的数据,如下所示:App\Model\User::find(123)->pants_size->UK_sizing
。 (此示例适用于ID为123的用户。)
答案 2 :(得分:0)
这就是我的工作方式:
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;
}