这是我的情景。
我有一张名为' team'的桌子。和laravel用户'表
我试图在团队和用户之间建立两个关系,以便'所有者'另一个是经理'
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Team extends Model
{
protected $table = 'team';
public function owner(){
return $this->belongsTo(User::class, 'id');
}
public function manager(){
return $this->belongsTo(User::class, 'id');
}
}
但似乎某些东西没有像我预期的那样工作,如何以正确的方式做到这一点?感谢。
答案 0 :(得分:5)
您不能使用相同的ID执行此操作,您需要为用户表创建2列owner_id和manager_id然后关联表
public function owner(){
return $this->belongsTo('App\User','id','owner_id');
}
public function manager(){
return $this->belongsTo('App\User','id','manager_id');
}
答案 1 :(得分:0)
您可以在users表上设置一个标志,告诉您哪一个代表团队和经理,比如role
,然后使用其他范围方法更新您的关系,例如:
public function user(){
return $this->belongsTo(User::class, 'id');
}
public function scopeManager(){
return $this->user()->where('role', 'manager');
}
public function scopeOwner(){
return $this->user()->where('role', 'owner');
}
这意味着您可以在用户和团队之间设置关系,并根据您所指的用户类型设置过滤器:
$manager = Team::first()->manager()->get();
//same for owner
不确定这是一个非常全面的答案,但我很确定它应该足够了。
任何遗漏都请指出。
答案 2 :(得分:0)
Laravel如何知道谁是所有者以及谁是经理? 您的数据库结构如何?
在当前场景中,owner()和manager()函数将返回相同的结果。
此外,在您当前的设置中,这意味着一个团队只属于一个用户(此外,您说您的外键存储在通常是主键的id
列中。)
我认为您需要的是User和Team之间的ManyToMany关系以及存储用户在团队中的角色的中间表。如果用户一次只是一个团队的成员,则用户belongsTo
团队和他的角色可以保存在User表的单独字段中。
一些建议:
1)更具体地说明你的问题。 “事情没有按照我的预期发挥作用”并不具体,它无助于我们理解你想做什么以及实际发生了什么
2)阅读Laravel文档。 https://laravel.com/docs/5.5/eloquent-relationships