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 中的事件。

如何在创建事件时将 ownsmanages 方法结合在一起,这样我就不必单独调用它们了?

更新:将 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;
        });
    }