当前位置: 首页 > 知识库问答 >
问题:

具有多个值的Laravel轴

孔欣可
2023-03-14

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

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

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

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

用户模型和表

Users: 
- id
- name
- email
etc

订阅表和型号

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

订阅用户透视(?)带有软删除的表

- 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。数据库/模型结构是解决问题的正确方法吗?

虽然我可以使用附加()和分离()方法,但我不能在subscription_table中填写start_date和end_date值。如何做到这一点?

我想在透视表上使用软删除。我如何使用它?

提前谢谢。

共有2个答案

年良骏
2023-03-14

>

  • 还不确定。

    附加具有附加列的方法。将模型设置为:

    public function subscriptions()
    {
    return $this->belongsToMany('App\Subscription')
    ->withTimestamps()
    ->whereNull('subscription_user.deleted_at')
    ->withPivot('start_date','end_date');
    }
    

    您可以根据需要更新行

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

    或者,您可能希望添加这样的方法来检索给定用户的已删除行。

     public function subscriptionsWithTrashed()
        {
            return $this->belongsToMany('App\Subscription')->withTimestamps()->withPivot('start_date','end_date');
        }
    
        public function subscriptionsOnlyTrashed()
        {
            return $this->belongsToMany('App\Subscription')->whereNotNull('subscription_user.deleted_at')->withTimestamps()->withPivot('start_date','end_date');
        }
    

  • 姜永贞
    2023-03-14

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

    $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');
    
     类似资料:
    • 问题内容: 我想在Java中实现具有多个值的哈希表,即 并且将返回2倍的值。 我怎样才能做到这一点? 问题答案: 您可以改用Multimap。它在列表中为一个键保留多个值。在commons- collection 和Guava中有实现。 这类似于使用值是列表的Hashmap,但是不必显式创建列表。 自己动手做的同一示例如下所示: 请注意,您可以将Multimap用作构建器,并对其调用asMap以返

    • 我想在laravel中创建一个RBAC系统,其中一个用户可以属于多个角色,每个角色可以有多个权限。中间件应在继续请求之前检查用户是否具有特定权限(在其任何角色内)。 我能够实施一个案例,其中 用户属于一个具有多个权限的角色 我需要实现具有多个权限的多个角色的用户。有什么指点吗?

    • 我是新来laravel的,所以原谅我可能的愚蠢问题。此外,我确实研究了所有其他“类似”的问题,但要么它们没有重现正确的解决方案,要么我真的很难理解。 情景: 我有一个帖子模型和一个主题模型。这就是他们现在的样子。 在岗位上。php 在主题上。php 现在,我需要实现的是: 如果将查询参数传递给请求(即q=Food),我只想返回在主题关系中包含主题食物的帖子,而不返回其他帖子。如果什么都没有通过,那

    • 我继承了一个项目,它有一些CRUD形式...在创建表单中,我们需要创建一个和关系的条目。所以基本上我得到的是以下这些 我不确定这是否是最好的方法,但似乎有效。 我遇到的问题是,在表单中,这些参与者/评论可以编辑、添加或删除,我不确定如何更新它们。是否可以更新它们,或者删除现有关系数据并重新添加它们是否更好? 我从来没有更新过关系,只是添加了它们,所以我不确定如何开始。 任何帮助都将不胜感激。

    • 下面我有一些代码。这段代码是一个基本的push/pop堆栈类,我将其创建为一个模板,以使某人能够推送/pop堆栈。我有一个家庭作业,我现在要做的是创建一个具有多个值的堆栈。 所以我希望能够创建一个堆栈,它基本上可以发送三个整数,我也可以推/弹出这些整数。我在寻找的是关于这应该如何工作的理论,我不想让别人帮我做作业。 情况是,我们正在处理部件。因此,用户将输入序列号(int)、制造日期(int)和l

    • 我有3个表:User、Role和具有Role\u id和User\u id的透视表RoleUser。 对于关系在我的模型我这样做: 榜样: 用户模型: 我为filter by one角色做了这项工作,效果很好: 但是现在我需要通过许多角色来过滤我的用户。 我将从我的前端发送一个数组,其中包含角色的id。 事实上,我可以得到如下角色 但我不知道如何才能获得具有此角色的用户。