Laravel как управлять многими отношениями для часто задаваемых вопросов - PullRequest
0 голосов
/ 26 февраля 2020

Я работаю над добавлением часто задаваемых вопросов в базу данных, используя laravel 5.6 отношения многие ко многим. Вот мои миграции:

Faq Категория: (Список всех типов часто задаваемых вопросов)

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

Faq Таблица:

 Schema::create('faqs', function (Blueprint $table) {
                $table->increments('id');
                $table->string('title', 160);
                $table->longText('description');
                $table->boolean('published')->default(0);
                $table->softDeletes();
                $table->timestamps();
            });

Типы часто задаваемых вопросов: (Все категории часто задаваемых вопросов для конкретного FAQ)

Schema::create('faq_types', function (Blueprint $table) {
               $table->increments('id');
                $table->integer('faq_id')->unsigned();
                $table->foreign('faq_id')->references('id')->on('faqs')->onDelete('cascade');
                $table->integer('faq_category_id')->unsigned();
                $table->foreign('faq_category_id')->references('id')->on('faq_categories')->onDelete('cascade');
                $table->timestamps();
            });

Я определил отношения следующим образом:

Приложение \ FaqCategory

class FaqCategory extends Model {

    use SoftDeletes;

    public function faqs() {
        return $this->belongsToMany('App\Faq');
    }
}

Приложение \ Faq

class Faq extends Model {

    use SoftDeletes;

    public function categories() {
        return $this->belongsToMany('App\FaqCategory');
    }

}

Я хочу получить ответы на часто задаваемые вопросы по их категориям. Предположим, есть General, Other категория в таблице faq_categories, тогда я хочу, чтобы faqs группировались по General, Other.

Но я не могу получить все faqs, сгруппированные по категориям. Я сделал следующее, но столкнулся с ошибкой:

$faq = FaqCategory::find(1);
        return $faq->faqs;
        dd($faq);

Ошибка:

SQLSTATE [42S02]: Базовая таблица или представление не найдено: 1146 Таблица 'db_name.faq_faq_category' didn не существует.

Кто-нибудь может подсказать мне, как справиться с этой ситуацией или лучший способ справиться с этим?

1 Ответ

1 голос
/ 26 февраля 2020

Я думаю, вам нужно определить ваши отношения как

public function faqs() {
    return $this->belongsToMany('App\Faq', 'faq_types');
}

и

public function categories() {
        return $this->belongsToMany('App\FaqCategory', 'faq_types');
    }

, поскольку вы не соблюдаете соглашение.

Laravel по умолчанию ищет таблицу 'faq_faq_category' (имена моделей в единственном числе в алфавитном порядке).

Подробнее об определении отношений "многие ко многим" можно прочитать в документации

...