当天的第二个协会问题,抱歉。
我有一个用户模型和一个商店模型。商店有很多用户,用户属于商店。这种关联很容易。
但是,我想在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;
答案 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;