Посев / Создание отношений «многие ко многим» - PullRequest
0 голосов
/ 23 мая 2019

У меня есть две модели: Победитель и Конкурс, победитель, возможно, выиграл много конкурсов, и конкурс, возможно, выиграл много победителей, для меня это отношение многие ко многим.

Теперь я создалдве мои миграции и миграция сводной таблицы:

Schema::create('winners', function (Blueprint $table) {
            $table->increments('id'); 
            $table->string('instagram');
            $table->timestamps();
        });

Schema::create('competitions', function (Blueprint $table) {
            $table->increments('id'); 
            $table->string('name');
            $table->timestamps();
        });

Schema::create('winner_competition', function (Blueprint $table) {
            $table->integer('winner_id')->unsigned();
            $table->integer('competition_id')->unsigned();
            $table->foreign('winner_id')->references('id')->on('winners')->onDelete('cascade')->onUpdate('cascade');
            $table->foreign('competition_id')->references('id')->on('competitions')->onDelete('cascade')->onUpdate('cascade');
        });

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

public function create(Create $request)
    {
        $winner = new Winner();
        $winner->instagram = $request->input('instagram');
        $winner->competition_id = '?';
        $winner->save();

        return response()->json([
            'winner' => $winner
        ]);
    }

DB::table('winners')->insert([
            'instagram' => '@hfgfgdhdd',
            'competition_id' => '?'
        ]);

Кто-то пролил свет на меня.

1 Ответ

0 голосов
/ 23 мая 2019

Пока у вас есть отношения многие ко многим:

$winner = new Winner();
$winner->instagram = $request->input('instagram');
$winner->save(); //add record in the DB
$competition = Competition::where(/**/); // <- you have to query certain competition here
$competition->winners()->attach($winner->id); //add record in the pivot table without check if such winner_id-competition_id pair exists

Ссылка

У ваших моделей должно быть отношение определено:

//Winner model
public function competitions()
{
    return $this->belongsToMany(Competition::class);
    //you can pass table name as 2nd parameter:
    //return $this->belongsToMany(Competition::class, 'winner_competition');
}

//Competition model
public function winners()
{
    return $this->belongsToMany(Winner::class);
}

PS С созданием нового Победителя вы можете пойти еще проще:

$winner = Winner::create(['instagram' => $request->input('instagram')]);
$competition = Competition::where(/**/);
$competition->winners()->attach($winner->id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...