【问题标题】:Laravel Schema set default value of a field as equal to value of another fieldLaravel Schema 将一个字段的默认值设置为等于另一个字段的值
【发布时间】:2018-02-07 02:28:40
【问题描述】:

假设我有一个包含列 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

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

【问题讨论】:

    标签: sql laravel schema


    【解决方案1】:

    就我个人而言,我会在控制器中维护这种逻辑,仅仅是因为在 MVC 环境中,如果我想更改它,我会去那里寻找它。 (可预测性是对任何可能追随你的开发者的善意。可能不适用于这种情况,但这是一个好习惯。)

    不过,如果您有兴趣阅读,MySQL Triggers 可能会做您想做的事,在整个世界中。

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

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

    【讨论】:

      【解决方案2】:

      您要问的是动态默认值,这对我在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';
      }
      

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

      【讨论】:

        猜你喜欢
        • 2016-01-02
        • 2021-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-19
        • 1970-01-01
        相关资源
        最近更新 更多