Laravel 5.6 Структура таблицы полиморфных отношений «многие ко многим» - PullRequest
0 голосов
/ 03 сентября 2018

Я хочу построить много-много полиморфных отношений Структура таблицы. Таблица выбранных категорий является сводной. Я создаю таблицу, подобную приведенной ниже, но не могу быть уверена в правильности.

blogs
    id - integer
    name - string
    ...
videos
    id
    video_url

categories
    category_id - integer
    name - string

categorizables
    category_id - integer - unsigned
    categorizable_id - integer -unsigned
    categorizable_type - string - nullable (value likes 'App\Blog' ) 

Следующий код относится к таблице категоризации.

public function up()
    {
        Schema::create('categorizables', function (Blueprint $table) {
            $table->unsignedInteger('category_id');
            $table->unsignedInteger('categorizable_id');
            $table->string('categorizable_type');
            $table->timestamps();
            $table->index(['category_id', 'categorizable_id']);
            $table->index(['categorizable_id', 'category_id']);
            $table->index('categorizable_type');
        });
    }
Файл миграции

категорий ниже

Schema::create('categories', function (Blueprint $table) {
           $table->increments('tag_id');
           $table->string('name');
           $table->string('normalized');
           $table->timestamps();
           $table->index('normalized');
        });

Как я могу построить структуру или я иду по верному пути?

С наилучшими пожеланиями

1 Ответ

0 голосов
/ 03 сентября 2018

Представьте себе эту структуру:

albums
    id
    ...

categories
    id
    ...

album_category
    id
    album_id
    category_id
    ...

Один альбом может принадлежать нескольким категориям. Одна категория может принадлежать нескольким альбомам.

Чем вы создаете сводную таблицу для управления этой ссылкой.

1) МИГРАЦИИ

  • таблица создания альбомов
  • создать таблицу категорий
  • создать сводную таблицу:

(соглашение об именах таблиц) имена двух таблиц в алфавитном порядке, разделенные "_"

(соглашение о столбцах) два внешних ключа с использованием имен таблиц и постфикса "_id"

(timestamps) вы можете использовать поведение "-> timestamps ()" для добавления дополнительной информации


2) АЛЬБОМНАЯ МОДЕЛЬ

use Illuminate\Database\Eloquent\Model;

Album extends Model {

   ...

   public function categories()
   {
    return $this->belongsToMany(Category::class);
    // return $this->belongsToMany(Category::class, 'album_category', 'album_id', 'category_id'); // explicit params
    // return $this->belongsToMany(Category::class)->withTimestamps();  // using timestamps
   }

   ...

}

3) МОДЕЛЬ КАТЕГОРИИ

use Illuminate\Database\Eloquent\Model;

Category extends Model {

   ...

   public function albums()
   {
    return $this->belongsToMany(Album::class);
    // return $this->belongsToMany(Album::class, 'album_category', 'album_id', 'category_id'); // explicit params
    // return $this->belongsToMany(Album::class)->withTimestamps(); // using timestamps
   }

   ...

}

4) ТЕСТ

// Album
$album = Album::find(1);
dd($album->categories);
// Category
$category = Category::find(1);
dd($category->albums);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...