我的数据库中有一个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();
});
答案 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)
根据documentation,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
方法