📅  最后修改于: 2023-12-03 15:00:50.329000             🧑  作者: Mango
在 Laravel 中,可以通过使用外键(Foreign Key)来建立表之间的关系。使用 Fluent Query Builder 或 Eloquent ORM 都可以轻松地设置外键。在本文中,我们将探讨在 Laravel 8 中设置外键的方法。
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 向数据库中插入数据时,框架会自动维护外键的关系。首先,我们需要在两个表的模型类中使用 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);
}
}
在上面的例子中,我们定义了 Order
和 User
的模型类,并分别使用了 belongsTo()
和 hasMany()
方法定义它们之间的关系。当我们使用以下代码创建一条订单时,Laravel 将自动设置外键关系:
$order = new Order;
$order->user_id = $user_id;
$order->save();
在以上示例中,$user_id
是 User
模型类中的用户 id
,插入此订单后,Laravel会自动生成外键。
使用 Fluent Query Builder 或 Eloquent ORM,在 Laravel 8 中设置外键非常容易,并且它们可以使数据库中表之间的关系更清晰明了。