2017-08-29 298 views
0

假设我有一个包含列col1和col2的表'table'。 我经由迁移创建:Laravel Schema将字段的默认值设置为等于另一个字段的值

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 

希望我已经清楚我想要达到什么样的解释? 预先感谢您:)

回答

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'; 
} 

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

0

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

如果你想阅读的话,MySQL Triggers也许可以做你的在其他事物的整个世界中,都要记住。

而只是为了阻止陷阱之一,在this post

指出[在MySQL]为了检查我们需要使用NULL值IS NULL & IS NOT NULL运算符。

相关问题