У меня есть два ресурса, Кирпичи и Стены.
Модель Brick
определяется как
class Brick extends Model
{
public function walls()
{
return $this->belongsToMany('App\Wall')->withTimestamps();
}
}
и модель Wall
определяется как
class Wall extends Model
{
public function bricks()
{
return $this->hasMany('App\Brick');
}
}
Идея состоит в том, что стена может иметь много кирпичей, а кирпич может принадлежать многим стенам.
В Nova у меня есть поля Wall
, настроенные как
public function fields(Request $request)
{
return [
ID::make()->sortable(),
Text::make('Name'),
HasMany::make('Bricks')
];
}
и поля Brick
, установленные как
public function fields(Request $request)
{
return [
ID::make()->sortable(),
Text::make('Name'),
BelongsToMany::make('Walls')
];
}
При попытке прикрепить кирпич к стене через ресурс кирпича я получаю ошибку SQLSTATE[HY000]: General error: 1 no such table: main.wall_id (SQL: insert into "brick_wall" ("brick_id", "wall_id", "created_at", "updated_at") values (5, 1, 2018-11-18 22:08:23, 2018-11-18 22:08:23))
, а при попытке добавить кирпич к стене через ресурс стены я получаю SQLSTATE[HY000]: General error: 1 no such column: bricks.wall_id (SQL: select * from "bricks" where "bricks"."wall_id" = 1 and "bricks"."wall_id" is not null)
Я пытался переключить отношения belongsToMany
и hasMany
, но это не помогает.
Редактировать: вот схема для промежуточной таблицы
Schema::create('brick_wall', function (Blueprint $table) {
$table->increments('id');
$table->integer('brick_id')->unsigned();
$table->integer('wall_id')->unsigned();
$table->foreign('brick_id')->references('id')->on('brick_id');
$table->foreign('wall_id')->references('id')->on('wall_id');
});