Laravel Eloquent Отношения с 2 сводными таблицами - PullRequest
0 голосов
/ 21 сентября 2019

Я новичок в отношениях и красноречив.Я до сих пор не понимаю, как работать с eloquent и pivot таблицами.

Ниже я попытаюсь описать мою проблему.У меня все еще есть проблемы с подключением таблиц Player - Layout - Content.

У меня есть следующая модель данных и я использую несколько сводных таблиц:

Table Players

Schema::create('players', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('extension');
        $table->string('description')->nullable();
        $table->string('status');
        $table->timestamps();
    });

Table Layouts

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

Таблица Layout_Player

Schema::create('layout_player', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('layout_id');
        $table->unsignedInteger('player_id');
        $table->timestamps();
    });

Элементы таблицы

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

Таблица Item_Layout

Schema::create('item_layout', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('item_id');
        $table->unsignedInteger('layout_id');
        $table->timestamps();
    });

Содержимое таблицы

Schema::create('contents', function (Blueprint $table) {
        $table->increments('id');
        $table->text('text');
        $table->unsignedInteger('item_layout_id');
        $table->unsignedInteger('layout_player_id');
        $table->timestamps();
    });

Игроков сколько угодно.Каждый игрок может иметь несколько макетов.Одни и те же макеты могут быть назначены нескольким игрокам.Каждый макет имеет любое количество элементов.Каждый элемент назначается ровно одному макету.Содержание варьируется от игрока к игроку и зависит от назначенного макета и элемента.

Вот модели:

Player

protected $table = 'players';
protected $fillable = [
    'name',
    'extension',
    'description'
];
public function layout(){
    return $this->belongsToMany('App\Layout', 'layout_player', 'player_id', 'layout_id');
    // return $this->belongsToMany(Layout::class);
}

Макет

protected $table = 'layouts';
protected $fillable = [
    'name'
];
public function player(){
    return $this->belongsToMany('App\Player', 'layout_player', 'layout_id', 'player_id');
    // return  $this->belongsToMany(Player::class);
}
public function item(){
    return $this->belongsToMany('App\Item', 'item_layout', 'layout_id', 'item_id');
}

Item

protected $table = 'items';
protected $fillable = [
    'fieldname',
    'art'
];
public function layout(){
    //return $this->hasOne(Layout::class);
    return $this->belongsToMany('App\Layout', 'item_layout', 'item_id', 'layout_id');
}

Содержимое

protected $table = 'contents';
protected $fillable = [
    'text',
    'layout_player_id',
    'item_layout_id'
];

Как получить правильные отношения между таблицами и сводными таблицами?Моя самая большая проблема связана с отношениями между контентом и таблицами layout_player и item_layout.

Не могли бы вы помочь мне здесь?Правильный ли мой подход?

...