gpt4 book ai didi

php - Laravel Pivot 具有多个值

转载 作者:行者123 更新时间:2023-11-29 11:34:50 25 4
gpt4 key购买 nike

我正在尝试使用 Laravel 构建一个(稍微复杂的)订阅服务。

订阅的类型为:早餐订阅,可在注册后 30 天内使用 20 份早餐。

例如,如果用户在 4 月 1 日注册了早餐订阅,则他可以选择任意 20 天,直到 4 月 30 日。

我制作了下表和相应的模型:

用户模型和表

Users: 
- id
- name
- email
etc

订阅表和模型

Subscriptions: 
- id
- name
- price
- validity
- meals_available

带有软删除的 subscription_user 数据透视表 (?)

- subscription_id
- user_id
- start_date
- end_date
- created_at
- updated_at
- deleted_at

我已经用belongsToMany关系船更新了相应的模型

用户:

class User extends Authenticatable
{
...
/*
* User can have many subscriptions
*/

public function subscriptions()
{
return $this->belongsToMany('App\Subscription')->withTimestamps();
}
}

订阅模式

class Subscription extends Model
{
...
/*
* Subscription can have many Users
*/

public function users()
{
return $this->belongsToMany('App\User')->withTimestamps();
}
}

我需要帮助解决的问题 1. 数据库/模型结构是否是解决问题的正确方法?

  • 虽然我可以使用attach() 和detach() 方法,但我无法在subscription_table 中填写start_date 和end_date 值。这个怎么做?

  • 我想在数据透视表上使用软删除。我怎样才能使用它?

  • 提前致谢。

    最佳答案

    要从数据透视表中设置值,您可以使用:

    $user->subscriptions()->updateExistingPivot($subscriptionId, ['start_date' => '2016-01-01', 'end_date' => '2016-01-01']);

    $user->subscriptions()->attach([1 => ['start_date' => '2016-01-01', 'end_date' => '2016-01-01'], 2, 3]);

    要使用 softDelete,您可以使用以下任一方法来更新 deteled_at 并以这种方式检索约束关系的数据

    $this->belongsToMany('App\Subscription')->wherePivot('deleted_at','null');

    关于php - Laravel Pivot 具有多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36800308/

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