我有一个Users表和一个Events表。
它具有一对多的关系。
每个用户可以创建许多事件。
每个事件都属于一个用户。
而且,它具有多对多关系。
每个用户可以根据需要加入任意数量的事件。
每个事件可以由许多用户加入。
这需要数据透视表。
现在,我被卡住了。
这是事件模型。
public function user(){
return $this->belongsTo('App\User');
}
public function users(){
return $this->belongsToMany('App\User')
->withTimestamps();
}
这是用户模型。
public function events(){
return $this->hasMany('App\Event');
}
public function events(){
return $this->belongsToMany('App\Event');
}
问题出在用户模型中,我无法定义具有相同名称的多个功能。
那么,有没有办法正确地做到这一点?
答案 0 :(得分:0)
在User
和Event
之间似乎有很多关系,因此将有user_event
之类的枢轴名称
用户模型
public function events() {
return $this->belongsToMany('App\Event')->using('App\UserEvent');
}
参考:https://laravel.com/docs/5.7/eloquent-relationships#many-to-many
答案 1 :(得分:0)
当然不能有两个具有相同名称的函数。根据您的情况,尝试为每个函数使用更具体的名称:
public function createdEvents()
{
return $this->hasMany('App\Event');
}
public function joinedEvents()
{
return $this->belongsToMany('App\Event');
}
您可以使用单个many-to-many
关系来管理与Pivot information的两个关系:
users
表
id
username
events
表
id
name
event_user
表
user_id
event_id
is_creator
(默认FALSE
,无符号整数)
...
然后在创建事件时,关联user
和event
对象并将is_creator
字段设置为TRUE
。
因此,在您的User
模型中:
app / User.php
public function events()
{
return $this->belongsToMany('App\Event')->withPivot('is_creator');
}
然后在您要创建事件的控制器中:
app / Http / Controllers / SomeCoolController.php
public function store(CreateEventRequest $request)
{
// Get your event data
$data = $request->only(['your', 'event', 'fields']);
// create your object
$newEvent = Event::create($data);
// create the relationship with the additional pivot flag.
auth()->user()->events()->attach($newEvent, ['is_creator' => true]);
// the rest of your code.
}
当用户想“加入”事件时:
app / Http / Controllers / SomeCoolController.php
public function join(JoinEventRequest $request)
{
// Get the event
$event = Event::find($request->event_id);
// relate the ev
auth()->user()->events()->attach($newEvent, ['is_creator' => false]);
// or just this, because its already set to false by default:
// auth()->user()->events()->attach($newEvent);
// the rest of your code.
}