如何在Laravel迁移的另一列中添加相同的默认值

时间:2018-10-23 13:14:00

标签: php laravel

我的数据库中有一个questions表,其中有一个question_title列,现在我添加了一个列question_slug,其中将包含问题的条目URL ,因此如何在Laravel迁移中将question_slug的默认值设置为question_title,我需要全部这些,因为我将问题保存在数据库中,因此我现在运行了php artisan make:migration add_column_to_questions --table=questions有此代码:

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

2 个答案:

答案 0 :(得分:1)

首先,创建一个新的迁移并将以下代码放入其中:

  

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()
    {
        //
    }
}

答案 1 :(得分:0)

根据documentationdefault()用于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方法