gpt4 book ai didi

database - 如何设计数据库以存储 "default"项

转载 作者:搜寻专家 更新时间:2023-10-30 22:23:33 25 4
gpt4 key购买 nike

我正在用 Laravel 开发一个应用程序。我有名为 Account 和 ShippingAddress 的模型。一个 Account 可以有一个或多个 ShippingAddress,但一个 ShippingAddress 只能有一个 Account。所以我使用的是一对多关系。

现在我想实现一项将 ShippingAddress 标记为“默认”的功能,并且每个“帐户”只能有一个“默认送货地址”。我确定了两种可能的解决方案:

  1. 在 ShippingAddress 表中添加“is_default”列。
  2. 创建一个“default_shipping_address”数据透视表,我将在其中存储“account_id”和“shipping_address_id”。

您认为哪一个是最佳解决方案,为什么?对于第二种情况:如何通过数据透视表在 Laravel 中实现一对一关系?

最佳答案

恕我直言,考虑到一个 ShippingAddress 只属于一个 Account,使用数据透视表似乎有点多余,第一个解决方案对我来说看起来更清晰。

顺便说一句,你可以用这种方式或类似的方式设计模型:

class Account extends Model
{
public function shipping_addresses()
{
return $this->hasMany('App\ShippingAddress');
}
public function default_shipping_address()
{
return $this->hasOne('App\ShippingAddress')->where('is_default', true);
}
}

class ShippingAddress extends Model
{
public function account()
{
return $this->belongsTo('App\Account');
}
}

这样你就可以eager load 'shipping_addresses' 或只有 'default_shipping_address' 当您检索 Account 模型时,例如:

$account = Account::with('shipping_addresses')->find($id);
$account = Account::with('default_shipping_address')->find($id);

显然,您不需要急于加载这两个关系,因为shipping_addresses 已经包含默认送货地址

您只需通过验证 ( unique rule ) 或数据库 constraints 检查您的代码中是否只有一个 默认送货地址或两者兼而有之。

关于database - 如何设计数据库以存储 "default"项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57809978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com