Laravel模型协会的建议

时间:2014-09-05 20:12:17

标签: php laravel associations model-associations

当天的第二个协会问题,抱歉。

我有一个用户模型和一个商店模型。商店有很多用户,用户属于商店。这种关联很容易。

但是,我想在User和Store之间设置第二个关联。商店有一个经理,用户可以是许多商店的经理。 Store有一个名为manager的字段。所以我希望能够做到这样的事情:

$store = Store::find($storeId);
echo $store->manager->first_name . " " . $store->manager->last_name;

我不确定如何设置这样的关联。 Store有一个名为manager的字段,它与User模型中的user_id字段匹配。以下是我尝试过的内容:

商店模式:

public function manager() {
    return $this->hasOne('user', 'manager', 'user_id'); //tried belongsTo as well...
}

我不确定如何指定它应该加入的字段。我的理解是它应该匹配经理'在商店里面有' user_id'在用户中,但我的理解似乎不正确大声笑。

......我不需要经理模特吗?我希望不是......

编辑:在安东尼奥的建议之后:

商店模式:

public function manager() {
    return $this->hasOne('user', 'user_id', 'manager');
}

用户模型:

public function managerOf() {
    return $this->belongsToMany('store', 'stores', 'manager', 'user_id');
}

但这仍然给了我一个"试图获得非对象的属性"错误...

echo $store->manager->user_id;

1 个答案:

答案 0 :(得分:0)

可能在您的商店模型中:

public function managerRelation() 
{
    return $this->hasOne('user', 'user_id', 'manager');
}

对于那些列

users->user_id
stores->manager

在您的用户模型上

public function managerOf() 
{
    return $this->belongsToMany('store', 'stores', 'manager', 'id');
}

您应该考虑将_id添加到您的所有ID列,例如manager_id。

编辑:

另一个问题是,manager已经是表格中的一列,因此您的关系不能是manager(),或者您必须将列添加到manager_id。我暂时将其重命名为managerRelation,以便您能够:

echo $store->managerRelation->user_id;