Laravel获得分配给我的用户的订单(带有作业历史记录)

时间:2017-10-05 13:22:49

标签: mysql sql database laravel eloquent

我有3个表/模型

  1. 用户(id)
  2. 订单(id)
  3. 作业(order_id,user_id,created_at)
  4. 管理员可以为某个用户分配订单,然后重新分配,我必须存储此历史记录。

    例如我有

    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的订单被重新分配给10.10.2010上id = 2的用户

    我正在使用Laravel 5.4和Eloquent。

    请帮我解决SQL查询或Eloquent关系(我想为我的用户模型分配订单关系)

2 个答案:

答案 0 :(得分:1)

我建议您对Assignments表进行一次修改。

您应该添加一个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

上创建新行

答案 1 :(得分:0)

使用以下命令对查询进行排序:

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

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