假设我有一个包含列的表'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
希望我已经清楚地解释了我想要实现的目标...... 提前谢谢你:)
答案 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可能会在其他事物的整个世界中做你想到的事情。
中所述,只是为了避免其中一个陷阱[在MySQL中]要检查NULL值,我们需要使用IS NULL& IS NOT NULL运算符。