关于在这两个表的模型中使用的关系的混淆

时间:2015-07-08 14:50:37

标签: sql laravel eloquent relationships

我有一个包含以下列的用户表:

| id | username | password | email | pants_size_id | shirt_size_id |

pants_size_idshirt_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')。

3 个答案:

答案 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模型中的hasOnepants_size创建shirt_size建立user关系。如果您不希望Laravel采用默认密钥(see here for details),请务必正确设置foreign keylocal 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;

    }