Как мне создать третью таблицу для новых категорий в Laravel - PullRequest
0 голосов
/ 18 октября 2019

Я занимаюсь разработкой учебного проекта, в котором у меня есть 2 таблицы. Таблица статей с заголовком и текстом, а также пользовательская таблица. Теперь я хочу, чтобы администратор (которого я создал в базе данных ранее) создал дополнительные категории статей. Кто-нибудь знает, как я могу связать свои таблицы или мои модели сейчас? Я работаю с Laravel только неделю и пока не совсем просматриваю его.

Это мои таблицы:

public function up()
{
    Schema::create('articles', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('heading',80);
        $table->string('clubchoose')->default('DEFAULT');
        $table->text('text');
        $table->timestamps();
        $table->unsignedInteger('author')->nullable();
        $table->foreign('author')->references('id')->on('users');
        $table->string('image')->nullable();
    });
}
public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->Increments('id');
        $table->boolean('isAdmin')->default(false);
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });
}

1 Ответ

0 голосов
/ 18 октября 2019

Итак, чтобы достичь этого, вам сначала нужно создать модель / контроллер / таблицу ваших категорий:

php artisan make:model Category -m //-m flag creates migration automatically

php artisan make:controller CategoryController --reosource //--resource flag creates a CRUD controller.

После этого в вашей таблице категорий добавьте столбец article_id (и другие нужные вам поля):

public function up()
    {
        Schema::table('categories', function (Blueprint $table) {
            // ...
            $table->integer('article_id')->nullable();
        });
    }

После этого вам нужно изменить таблицу статей, добавив столбец category_id. Для этого создайте новую миграцию, чтобы добавить только один столбец:

php artisan make:migration add_category_id_to_articles_table --table==articles

Внутри этой миграции добавьте следующее:

public function up()
    {
        Schema::table('articles', function (Blueprint $table) {
            $table->integer('category_id')->nullable();
        });
    }

Теперь, когда у вас настроены миграции, вам нужноналадить отношения. Внутри вашей модели Article добавьте это отношение:

public function category(){
    return $this->belongsTo('App\Category');
}

Таким образом, статья будет принадлежать категории. Для категорий, поскольку у них будет более одной статьи, добавьте это отношение:

public function articles(){
    return $this->hasMany('App\Article');
}

Итак, теперь у вас все настроено. Запустите миграцию, добавьте несколько категорий и протестируйте их. Дайте мне знать, если у вас есть какие-либо ошибки или проблемы.

РЕДАКТИРОВАТЬ:

Если вы хотите, чтобы только администраторы добавляли новые категории, вы можете создать кнопку, которая будет видна только администраторам. Примерно так:

@if(Auth->user()->role == 'admin'){
   //show button
@endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...