2014-09-05 55 views
0

当天的第2协会问题,抱歉。Laravel模特协会咨询

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

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

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

我不知道如何建立这样的关联。商店有一个名为manager的字段,它与用户模型中的user_id字段相匹配。以下是我已经试过:

Store模式:

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

我不知道如何指定哪些字段应该加入上。我的理解是,它应该在商店中与'user_id'中的'经理'匹配在用户中,但我的理解似乎并不正确。

...我并不需要一个经理模式是吧?我希望不是......

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

Store模式:

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

如果你做你这话是什么让DD($ store->经理)'? – 2014-09-05 20:38:04

+0

看来这里有一些冲突的信息。你能否进一步解释'用户属于Store'和'用户可以有很多stores' – user3158900 2014-09-05 20:43:08

+0

经理@AntonioCarlosRibeiro返回此:字符串“mrowland”(长度= 8) – mrowland 2014-09-05 20:51:46

回答

1

可能在你商店模式:

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; 
+0

我已经使用您的建议更新了我的问题。不幸的是,似乎没有帮助。不知道现在有什么问题。 – mrowland 2014-09-05 20:50:22

+0

啊,这很有道理。我不确定它是否工作,因为现在我得到另一个有趣的错误“最大功能嵌套级别为'100'到达,中止!”。不明白,一切都大声笑。我将不得不在稍后再回来。感谢您的所有帮助! – mrowland 2014-09-05 21:08:09

+0

你现在有一个递归,超过了100个嵌套层次。但我真的不可能在哪里。如果你做'dd($ store-> managerRelation)'你仍然会得到这个错误? – 2014-09-05 21:10:53