Связь с таблицей перекрестных ссылок - PullRequest
0 голосов
/ 21 апреля 2019

У меня есть 3 таблицы: books, categories и book_category.

book_category - таблица перекрестных ссылок.У него есть такая структура: book_id, category_id

Мне нужно вывести категории (в виде флажков) на странице создания модели книги.Это работает, если я делаю это так:

// Book Model
public function getCategoriesOptions($value, $formData)
{
    $categories = Category::all();
    $list = array();
    foreach ($categories as $category) {
        $list[$category->id] = $category->name;
    }
    return $list;
}

Но категории, проверенные при создании , не проверяются в Preview, Update pages.В таблице book_category все отмеченные категории сохраняются.Думаю, проблема в отношениях.

Я создал модель для таблицы book_category.В результате появилось 3 модели: Book, Category, BookCategory.Как реализовать отношения между ними?

Очевидно, что Book может иметь много категорий, поэтому в модели Book я написал:

public $hasMany = [
    'categories' => 'mark\myplugin\Models\Category'
];

BookCategory, потому что книга связана с категориейдо book_category таблицы.Но как быть с другими моделями?

Ответы [ 2 ]

1 голос
/ 21 апреля 2019

В отношении «многие ко многим» BookCategory считается слабой сущностью

Вам не нужно создавать для нее модель

Попробуйте это

namespace App;

use Illuminate\Database\Eloquent\Model;

class Book extends Model
{
    public function categories()
    {
        return $this->belongsToMany('App\Category', 'book_category', 'book_id', 'category_id');
    }
}
namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    public function books()
    {
        return $this->belongsToMany('App\Book', 'book_category', 'category_id', 'book_id');
    }
}

Подробнее см .: Отношения ко многим ко многим

0 голосов
/ 22 апреля 2019

Я сделал не так.Вот решение.Я использовал Builder.

  1. Создайте сводную таблицу (или таблицу перекрестных ссылок) с 2 полями: book_id, category_id и установите оба параметра как первичный ключ .
  2. В модели книги создайте отношение поле.Не нужно писать подчеркивание имени.В свойстве отношения задайте имя столбца категории.
  3. В файле модели книги напишите:

    public $ assignToMany = ['Categories' => ['mark \ myplugin \ Models \ Category', 'table' => 'mark_myplugin_books_categories']];

Вот и все!Теперь категории, которые вы отметили, будут сохранены в сводной таблице, и они будут проверены в Preview, Update pages.

...