Наличие разных отношений в одних и тех же моделях в Laravel Eloquent - PullRequest
0 голосов
/ 28 января 2019

Я строю проект, в котором пользователь может создать событие и присоединиться ко многим событиям, и у этого события есть один владелец, но к нему может присоединиться много пользователей

Вот методы в модели Event.php

public function creator()
{
   return $this->belongsTo(User::class);
}

public function users()
{
   return $this->belongsToMany(User::class);
}

Вот методы в модели User.php

public function createdEvents()
{
   return $this->belongsTo(User::class);
}

public function joinedEvents()
{
   return $this->belongsToMany(Event::class);
}

А вот файл миграции сводной таблицы

class CreateEventUserTable extends Migration
{
 /**
 * Run the migrations.
 *
 * @return void
 */
 public function up()
 {
   Schema::create('event_user', function (Blueprint $table) {
       $table->unsignedInteger('event_id');
       $table->unsignedInteger('user_id');
       $table->timestamps();
       $table->primary(['event_id', 'user_id']);    

       $table->foreign('event_id')
           ->references('id')->on('events')
           ->onDelete('cascade');

        $table->foreign('user_id')
           ->references('id')->on('users')
           ->onDelete('cascade');
   });
}

А вот миграция событий

public function up()
{
   Schema::create('events', function (Blueprint $table) {
       $table->increments('id');
       $table->unsignedInteger('user_id');
       $table->text('content');
       $table->date('date');
       $table->time('time');
       $table->unsignedSmallInteger('min_attendance');
       $table->unsignedSmallInteger('max_attendance');
       $table->string('location');
       $table->unsignedInteger('category_id');
       $table->timestamps();

       $table->foreign('user_id')
        ->references('id')->on('users')
           ->onDelete('cascade');
   });
}

Я хочу знать, где я поступил неправильно или возникла проблема, чтобы избежать будущих проблем при получении данных с использованием Laravel Eloquent

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Вам необходимо обновить модель пользователя.Соотношение созданных событий должно быть таким:

public function createdEvents()
{
   return $this->hasMany(Event::class);
}
0 голосов
/ 28 января 2019

Я думаю, что вы должны сохранять только одно отношение в вашей модели событий, например:

public function user()
{
   return $this->belongsTo(User::class);
}

И ваша пользовательская модель выглядит так:

public function events()
{
   return $this->belongsToMany(Event::class);
}


И у вас может быть третья модельс именем Subscription и затем создайте таблицу отношений между событиями и пользователями


public function up()
{
   Schema::create('subscriptions', function (Blueprint $table) {
       $table->increments('id');
       $table->unsignedInteger('user_id');
       $table->unsignedInteger('event_id');
       $table->timestamps();

       $table->foreign('user_id')
        ->references('id')->on('users')
           ->onDelete('cascade');

       $table->foreign('event_id')
        ->references('id')->on('events')
           ->onDelete('cascade');
   });
}

И, наконец, модель подписки:

public function users()
{
   return $this->belongsToMany(User::class);
}

public function event()
{
   return $this->belongsTo(Event::class);
}

Таким образом, вы сможете получить доступ ко всем пользователям, которые присоединились к вашему событиюс таким запросом:

$joinedUsers = Subscription::where('event_id','=','$id')->pluck('user_id');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...