Как добавить значение по умолчанию, как и из другого столбца в Laravel Migration - PullRequest
0 голосов
/ 23 октября 2018

У меня есть таблица questions в моей базе данных, в которой у меня есть столбец question_title, теперь я добавил столбец question_slug, который будет содержать URL-адрес пули вопроса , поэтомукак я установил question_slug значение по умолчанию question_title в Laravel Migration, мне нужно все это, потому что у меня есть вопросы, сохраненные в базе данных, поэтому я запустил php artisan make:migration add_column_to_questions --table=questions, теперь у меня есть этот код:

Schema::table('questions', function (Blueprint $table) {
    $table->string('question_slug')->default();
});

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Прежде всего, создайте новую миграцию и поместите в нее этот код:

connections_string: он находится в конфигурации файла web / config / database.php

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class NameOfUrMigration extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('questions', function (Blueprint $table) {
            $table->string('question_slug')->default();
        });

         $questions = DB::connection('connections_string')->table('questions')->get();

         foreach($questions as $question)
         {
            $question->question_slug = str_slug($question->question_title);
            $question->save();
         }


    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        //
    }
}
0 голосов
/ 23 октября 2018

Согласно документации , default() используется для Declare a default value for a column.Это означает, что значение, которое вставляется по умолчанию в поле, если вы не указали его в запросе insert.

default() не может помочь вам достичь того, что вам нужно.Что вы можете сделать, это создать новый класс миграции с необработанным запросом в методе up(), который обновит значение question_slug значением question_title.

примерно так:

public function up()
{
    $sql = "UPDATE `questions` SET `question_slug` = `question_title` WHERE 1;"; 
    //add filtering conditions if you don't want ALL records updated
    DB::connection()->getPdo()->exec($sql);
}

Убедитесь, что вы также создали соответствующий down() метод для rollback

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...