Разрешить миграцию Laravel ManyToMany иметь несколько одинаковых комбинаций - PullRequest
0 голосов
/ 23 февраля 2019

У меня проблема с отношением ManyToMany в Laravel.

У меня есть таблица A и таблица B с сводной таблицей для их соединения.Когда я пытаюсь присоединить A и B с некоторыми пользовательскими сводными данными, это работает просто отлично.Но как только я пытаюсь установить другое соединение между A и B с некоторыми другими сводными данными, это либо выдает мне ошибку, что таблицы уже связаны, либо просто дает таблицам один и тот же идентификатор, что портит весь мой сайт.

Кажется, что $table->increments('id'); ничего не делает, потому что даже если я удаляю его, в таблице все еще есть поле идентификатора, которое, по-видимому, представляет собой комбинацию идентификаторов A и B.

Я хочучтобы иметь возможность иметь множество соединений между A и B с пользовательскими / уникальными сводными данными.

Таблица A с именем bounties имеет следующий построитель схем

$table->increments('id');
$table->boolean('enable');
$table->char('name');
$table->char('slug');
$table->timestamps();

ИТаблица B с именем users имеет следующее

$table->increments('id');
$table->boolean('enable');
$table->char('name');
$table->char('slug');
$table->timestamps();

Сводная таблица соединений с именем bounty_user Таблица настроена следующим образом

$table->increments('id');

$table->json('user_data')->nullable();

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

$table->unsignedInteger('bounty_id');
$table->foreign('bounty_id')->references('id')->on('bounties')->onDelete('cascade');

$table->timestamps();

My пользователь модель

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;


    public function bounties()
    {
        return $this->belongsToMany('App\Bounty')
            ->withPivot('user_data', 'state')->using('App\BountyPivotCasting')
            ->withTimestamps();
    }
}

и модель награды

class Bounty extends Model
{
    use Sluggable;

    public function sluggable()
    {
        return [
            'slug' => [
                'source' => 'name'
            ]
        ];
    }

    public function users()
    {
        return $this->belongsToMany('App\User')
            ->withPivot('user_data', 'state')->using('App\BountyPivotCasting')
            ->withTimestamps();
    }
}

1 Ответ

0 голосов
/ 23 февраля 2019

В ваших настольных моделях убедитесь, что у вас есть

Модель Bountie

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

Модель пользователя

public function bountie()
{
  return $this->belongsToMany(Bountie::class, 'bounty_user');
} 

Затем используйте sync дляприкрепить и отсоединить EX: $user->bountie()->sync(bountie_id)

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