如何为不同类型的用户制作出价表结构

时间:2019-02-21 12:19:33

标签: mysql sql database laravel mysqli

我非常绝望,并且已经考虑了很长时间,无法想象我会多么感谢您的帮助。相信我。

这是我的情况。有3种类型的用户(角色)。客户端,服务提供商,管理员。

  

客户端-添加新订单

     

服务提供商-执行添加的订单

     

管理员-确保客户添加的订单正确无误   服务提供者并将其提供给服务提供者。

当客户添加新订单时,应该发生的是,客户与管理员之间必须有一个出价系统。添加时的订单价格可能是50美元。客户可以出价40美元,然后管理员可以就此出价或出价其他价格。然后客户可以选择接受或尝试其他价格,依此类推。这是主意。协商价格后,服务提供商和管理员之间必须执行相同的过程。

因此,我需要一个表,用于在客户端和管理员之间以及管理员和服务提供者之间存储出价,并且还需要存储出价历史记录而不是最新出价。

用户表

+----+--------+---------------------------------+-------------+
| id |  name  |          userable_type          | userable_id |
+----+--------+---------------------------------+-------------+
|  1 | George | App\Http\Models\Client          |           2 |
|  2 | John   | App\Http\Models\ServiceProvider |           3 |
|  3 | Ben    | App\Http\Models\Admin           |           4 |
+----+--------+---------------------------------+-------------+

客户端表/管理表/服务提供者表目前看起来相同

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

现在,如果我要制作出价表,则不想为服务提供商,管理员和客户分别创建新表。我更喜欢使它成为唯一的一个。

让我们举个例子:

+----+----------+---------+-------+
| id | order_id | user_id | price |
+----+----------+---------+-------+
|  1 |        2 |       1 |    50 |
|  1 |        2 |       1 |    60 |
|  1 |        2 |       3 |    70 |
+----+----------+---------+-------+

现在我如何知道admin的出价,客户的出价和服务提供商的出价?基本上,我要获取的是order_id 2的所有客户出价和管理员出价,以及order_id 2的提供者出价和管理员出价。我已尽力而为,但仍无法解决。也许是更好的版本,您可以建议我使用。

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以通过加入竞标获得竞标

$bids = DB::table('bids')
        ->join('users', 'users.id', '=', 'bids.user_id')
        ->select('bids.*', 'users.userable_type')
        ->where('bids.order_id',$order_id)
        ->whereIn('users.userable_type', ['App\Http\Models\Client','App\Http\Models\Admin'])
        ->get();

答案 1 :(得分:0)

我不确定您是要单独列出清单还是获得所有出价,然后再检查以确保两者均达成。它们都可以与您提供的示例表一起使用。

$bids = Bid::where('order_id', 2)->get(); //Get all bids where order_id=2
foreach($bids as $bid){ //Loop through fetched bids
    if($bid->userable_type=="App\Http\Models\Client"){ //If user is 'Client'
        //User is client
    }
}

$bids = Bid::where('order_id', 2)->where('userable_type', "App\Http\Models\Client")->get(); //List with only bids from Clients

让我知道您的想法。