Laravel 迁移 - 在表中添加检查约束

我想在Laravel Migration中创建一个这样的表-

CREATE TABLE Payroll
(
 ID int PRIMARY KEY, 
 PositionID INT,
 Salary decimal(9,2) 
 CHECK (Salary < 150000.00)
);

我所做的是——

Schema::create('Payroll', function (Blueprint $table)
{
    $table->increments('id');
    $table->integer('PositionID ');
    $table->decimal('Salary',9,2);
    //$table->timestamps();
});

但我不能创造这个 -

 CHECK (Salary < 150000.00)

谁能告诉,如何在Laravel Migration中实现这些限制?CHECK


答案 1

蓝图类不支持添加约束(至少在 Laravel 5.3 中是这样),但是可以使用数据库语句直接从迁移中向表添加约束。

在迁移文件中,

public function up ()
{
    Schema::create('payroll', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('position_id');
        $table->decimal('salary',9,2);
    });

    // Add the constraint
    DB::statement('ALTER TABLE payroll ADD CONSTRAINT chk_salary_amount CHECK (salary < 150000.00);');
}

答案 2

我不认为这是Laravel迁移中的一个功能。我认为这是必须在您的模型或验证逻辑中的东西,除非您手动将其添加到MYSQL中

这就是我要做的

$this->validate($request, [
    'Salary' => 'max:150000.00',
]);

推荐