【问题标题】:Laravel get orders assigned to my user (with assignments history)Laravel 获取分配给我的用户的订单(带有分配历史记录)
【发布时间】:2017-10-05 13:22:49
【问题描述】:

我有 3 个表/模型

  1. 用户(ID)
  2. 订单 (id)
  3. 分配(order_id、user_id、created_at)

管理员可以将订单分配给某个用户,然后重新分配,我必须存储此历史记录。

例如我有

Users

----+
id  |
----+
1   |
-----
2   |
----+

Orders

----+
id  |
----+
1   |
----+
2   |
----+

Assignments

------------------------------------
id | user_id | order_id | created_at
------------------------------------
 3 |   2     |    1     | 10.10.2010
------------------------------------
 2 |   1     |    1     | 09.10.2010
------------------------------------
 1 |   1     |    2     | 09.10.2010

现在我想将订单分配给 id = 1 的用户,从逻辑上讲,我必须获得 id = 2 的订单,因为 id = 1 的订单在 2010 年 10 月 10 日被重新分配给 id = 2 的用户

我正在使用 Laravel 5.4 和 Eloquent。

请帮我处理 SQL 查询或 Eloquent 关系(我想为我的用户模型分配Orders 关系)

【问题讨论】:

  • 为什么不添加deleted_at 如果管理员重新分配订单设置removed_at 字段,然后在您的查询中,如果您想要重新分配的字段,请添加withTrashed() 否则它将只返回当前分配的订单! !
  • 我有另一个可行的解决方案,但我想知道如何在不进行任何修改的情况下解决这个问题

标签: mysql sql database laravel eloquent


【解决方案1】:

我建议对您的分配表进行一项修改。

您应该添加一个status 字段,该字段将用作以下内容(待定、活动、重新分配、完成)。实际上,您应该创建一个新表来存储它,但举个简单的例子,让我们坚持这个。

这样,您可以保留所有订单的历史记录。如果管理员出于某种原因将订单从 userA 重新分配给 userB,然后将其重新分配回 userA,这也会有所帮助。

通过这样做,您获取订单 1 的当前用户的查询将是:

Assignments::where('order_id', 1)->where('status', 'active')->first();

要获取订单的历史记录,可以使用以下查询:

Assignments::where('order_id', 1)->orderBy('created_at')->get();

这将显示所有带有状态的订单。

-------------------------------------------------
id | user_id | order_id | status     | created_at
-------------------------------------------------
 3 |   5     |    1     | active     | 10.15.2010
-------------------------------------------------
 2 |   2     |    1     | reassigned | 09.11.2010
-------------------------------------------------
 1 |   1     |    1     | reassigned | 09.10.2010

显然,每次管理员更改订单状态时,您都需要更新状态字段,然后在Assignments 表上创建一个新行

【讨论】:

  • 是的,这是最好的方法,我已经这样做了,但是为了感兴趣,我想知道如何在不修改的情况下解决这个问题。
【解决方案2】:

对查询进行排序:

orderBy('created_at', 'desc')->firstOrFail();

确保您在模型中使用正确的关系,例如拥有多个或属于Docs here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 2010-10-26
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多