У меня проблема с отношением 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();
}
}