对在这两个表的模型中使用哪种关系感到困惑

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_idshirt_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”)。

创建一个 functionuser 模型中的 pants_sizeshirt_size 建立 hasOne 关系。如果您不希望 Laravel 使用默认键 (see here for details),请务必正确设置 foreign keylocal 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..)