Laravel Schema将字段的默认值设置为等于另一个字段

时间:2017-08-29 14:58:08

标签: sql laravel schema

假设我有一个包含列的表'table':col1和col2。 我通过迁移创建它:

public function up()
{
    Schema::create('table', function (Blueprint $table) {
        $table->increments('id');
        $table->string('col1');
        $table->string('col2');
}

是否可以在“数据库层”定义以下行为(无需在控制器或模型层中进行配置):

当我在表中插入新记录时,如果col2的值不可用,我想要col2 = col1的值。

示例:

Table::create(['col1'=>'a']);

id col1 col2
1   a     a

Table::create(['col1'=>'a', 'col2'=>'b']);

id col1 col2
2   a     b

希望我已经清楚地解释了我想要实现的目标...... 提前谢谢你:)

2 个答案:

答案 0 :(得分:0)

你问的是动态默认值,这对我mySQL的知识有点难以理解,为什么不在将它插入控制器时检查它,然后将数据放在:

public function create(Request $request)
{
    $data = $request->only('col1', 'col2');
    $data['col2'] = $data['col2'] ? $data['col2'] : $data['col1'];
    $createData = Table::create($data);
    return 'Data created successfully';
}

它可以更加干净高效。希望这会有所帮助。

答案 1 :(得分:0)

就个人而言,我在控制器中保持这种逻辑,仅仅因为在MVC环境中,如果我想改变它,那就是我要去寻找它的地方。 (可预测性是对任何可能来自你的开发者的善意。在这种情况下可能不适用,但这是一个好习惯。)

尽管如此,如果你想要阅读一些内容,MySQL Triggers可能会在其他事物的整个世界中做你想到的事情。

正如this post

中所述,只是为了避免其中一个陷阱
  

[在MySQL中]要检查NULL值,我们需要使用IS NULL& IS NOT NULL运算符。