📜  forenkey 设置 inlaravel 8 - PHP (1)

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

在 Laravel 8 中设置 Foreign Key

在 Laravel 中,可以通过使用外键(Foreign Key)来建立表之间的关系。使用 Fluent Query Builder 或 Eloquent ORM 都可以轻松地设置外键。在本文中,我们将探讨在 Laravel 8 中设置外键的方法。

Fluent Query Builder 中设置外键

Fluent Query Builder 是一种在 Laravel 中使用原始 SQL 语句的方法。要设置外键,我们需要使用 foreign() 方法。下面是一个例子:

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateOrdersTable extends Migration
{
    public function up()
    {
        Schema::create('orders', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('orders');
    }
}

通过 $table->foreign('user_id')->references('id')->on('users') 方法可以设置 users 表的 id 字段作为 orders 表的外键。

Eloquent ORM 中设置外键

当使用 Eloquent ORM 向数据库中插入数据时,框架会自动维护外键的关系。首先,我们需要在两个表的模型类中使用 belongsTo()hasMany() 方法。让我们看一个示例:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Order extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    public function orders()
    {
        return $this->hasMany(Order::class);
    }
}

在上面的例子中,我们定义了 OrderUser 的模型类,并分别使用了 belongsTo()hasMany() 方法定义它们之间的关系。当我们使用以下代码创建一条订单时,Laravel 将自动设置外键关系:

$order = new Order;
$order->user_id = $user_id;
$order->save();

在以上示例中,$user_idUser 模型类中的用户 id,插入此订单后,Laravel会自动生成外键。

使用 Fluent Query Builder 或 Eloquent ORM,在 Laravel 8 中设置外键非常容易,并且它们可以使数据库中表之间的关系更清晰明了。