📜  laravel 7 eloquent on delete set null schema - PHP (1)

📅  最后修改于: 2023-12-03 15:02:34.330000             🧑  作者: Mango

Laravel 7 Eloquent On Delete Set Null Schema - PHP

如果您正在使用 Laravel 7,那么您可能已经知道了 Eloquent ORM。这是一个可以通过 PHP 代码在数据库中创建、读取、更新和删除记录,而不是通过 SQL 语句进行的 ORM(对象关系映射)框架。这可以让您更加专注于您的业务逻辑,而不需要关注底层的数据库操作。

在 Laravel 7 中,Eloquent ORM 能够处理数据的完整性。这意味着您可以定义约束条件,以确保数据在数据库中的完整性。例如,您可以定义一个外键,使其在删除相关记录时设置为 null 值。在这篇文章中,我们将介绍如何在 Laravel 7 中使用 Eloquent ORM 来实现这样的功能。

首先,我们需要在数据库中创建两张表,一张是主表,一张是从表。主表应该有一个唯一标识符,从表应该有一个指向主表的外键。以下是两张表的示例:

Schema::create('main_table', function (Blueprint $table) {
    $table->id();
    $table->string('name');
});

Schema::create('relative_table', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->unsignedBigInteger('main_table_id')->nullable();
    $table->foreign('main_table_id')->references('id')->on('main_table')->onDelete('set null');
});

这里我们定义了两个表,main_tablerelative_tablemain_table 有一个名为 name 的列和一个自动生成的 id 列。另一方面,relative_table 有一个名为 name 的列,一个自动生成的 id 列和一个指向 main_table 的外键 main_table_idonDelete('set null')用于在删除主表记录时自动将外键设为 null(也可以是其他值)。

接下来,我们可以使用 Eloquent ORM 来定义这两个表:

class MainTable extends Model
{
    protected $table = 'main_table';

    public function relatives()
    {
        return $this->hasMany(RelativeTable::class, 'main_table_id', 'id');
    }
}

class RelativeTable extends Model
{
    protected $table = 'relative_table';

    public function mainTable()
    {
        return $this->belongsTo(MainTable::class, 'main_table_id', 'id');
    }
}

在这里,我们定义了 MainTableRelativeTable 模型。MainTable 模型有一个名为 relatives 的关系方法,在 RelativeTable 模型中定义了一个名为 mainTable 的关系方法。

现在我们可以将两个表链接在一起:

$main = MainTable::create(['name' => 'test']);
$relative = $main->relatives()->create(['name' => 'test_relative']);

echo $main->id; // Outputs: 1
echo $relative->id; // Outputs: 1
echo $relative->main_table_id; // Outputs: 1

$main->delete();

echo $relative->main_table_id; // Outputs: null

在这个例子中,我们创建了一个名为 test 的主表记录和一个名为 test_relative 的从表记录,建立了他们之间的关系。然后,我们通过 $main->delete() 删除了主表记录,并检查了 $relative->main_table_id 的值,确认该值已被设为 null。

总之,使用 Eloquent ORM 在 Laravel 7 中实现外键的 set null 约束非常简单。只需要在 Eloquent 模型中定义关系,然后在数据库中定义外键约束即可。这使得我们的业务逻辑更加清晰和易于维护。