Laravel 5.1:多对多和一对多关系
Laravel 5.1: Many-to-many alongside one-to-many relationship
我正在制作一个活动 RSVP 应用程序,用户可以在其中创建一个(或多个)活动,并允许其他用户与他们一起管理该活动。每个事件还有一个所有者(创建该事件的用户)。
我的目标:
我如何创建事件、分配其所有者并同时将其添加到 event_user
枢轴 table
这些是我目前的关系...
事件Class - App\Event
public function owner()
{
return $this->belongsTo('App\User', 'owner_id');
}
public function managers()
{
return $this->belongsToMany('App\User');
}
用户 Class - App\User
public function owns()
{
return $this->hasMany('App\Event', 'owner_id');
}
public function manages()
{
return $this->belongsToMany('App\Event');
}
删除了不相关的迁移。
更新方法 - 根据 Mina Youssef 的建议。
$user = App\User::find(1);
$event = new App\Event(['name' => 'Event 2']);
$event = $user->owns()->save($event);
$user->manages()->attach($event->id);
这现在分配所有者并将用户正确地附加到枢轴 table 中的事件。
如何在创建事件时将 owns
和 manages
方法结合在一起,这样我就不必单独调用它们了?
更新:将 boot
事件添加到 AppServiceProvider
namespace App\Providers;
use App\Event;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Event::created(function ($event) {
$event->owner->manages()->attach($event->id);
return true;
});
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
如果要将条目添加到多对多关系,请使用 attach()
方法
因此您可以执行以下操作:
$user->manages()->attach($event->id);
但是,这在保存 $event 模型后有效,以获取其 ID。
要直接触发附加方法,您可以在 AppServiceProvider
中执行以下操作
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Event::created(function ($event) {
$event->owner->manages()->attach($event->id);
return true;
});
}
我正在制作一个活动 RSVP 应用程序,用户可以在其中创建一个(或多个)活动,并允许其他用户与他们一起管理该活动。每个事件还有一个所有者(创建该事件的用户)。
我的目标:
我如何创建事件、分配其所有者并同时将其添加到 event_user
枢轴 table
这些是我目前的关系...
事件Class - App\Event
public function owner()
{
return $this->belongsTo('App\User', 'owner_id');
}
public function managers()
{
return $this->belongsToMany('App\User');
}
用户 Class - App\User
public function owns()
{
return $this->hasMany('App\Event', 'owner_id');
}
public function manages()
{
return $this->belongsToMany('App\Event');
}
删除了不相关的迁移。
更新方法 - 根据 Mina Youssef 的建议。
$user = App\User::find(1);
$event = new App\Event(['name' => 'Event 2']);
$event = $user->owns()->save($event);
$user->manages()->attach($event->id);
这现在分配所有者并将用户正确地附加到枢轴 table 中的事件。
如何在创建事件时将 owns
和 manages
方法结合在一起,这样我就不必单独调用它们了?
更新:将 boot
事件添加到 AppServiceProvider
namespace App\Providers;
use App\Event;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Event::created(function ($event) {
$event->owner->manages()->attach($event->id);
return true;
});
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
如果要将条目添加到多对多关系,请使用 attach()
方法
因此您可以执行以下操作:
$user->manages()->attach($event->id);
但是,这在保存 $event 模型后有效,以获取其 ID。
要直接触发附加方法,您可以在 AppServiceProvider
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Event::created(function ($event) {
$event->owner->manages()->attach($event->id);
return true;
});
}