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

Posted

技术标签:

【中文标题】如何为不同类型的用户制作出价表结构【英文标题】:how to make bidding table structure for different type of users 【发布时间】:2019-07-15 08:35:46 【问题描述】:

这是我的场景。有 3 种类型的用户(角色)。客户、服务提供商、管理员。

客户 - 添加新订单

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

管理员 - 确保客户添加的订单是正确的,发现 service-provider 并将其交给 service-provider。

当客户添加新订单时,客户和管理员之间必须有投标系统。也许添加时的订单价格是 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 |
+----+----------+---------+-------+

现在我如何知道哪个出价是针对管理员、哪个针对客户、哪个针对服务提供商?基本上,我想要的是获得 order_id 2 的所有客户出价和管理员出价,以及 order_id 2 的供应商出价和管理员出价。我尽力了,但仍然无法弄清楚这一点。也许你可以建议我使用更好的版本。

【问题讨论】:

您需要两个用户的全部出价,还是只需要两个用户的最后一个出价? 我更喜欢两个用户的所有出价。 假设您想要所有用户类型的 order_id=2 的所有出价,您不能只执行 where('order_id','2') 吗?或者你的意思是你想要他们分开?比如order_id=2和user=admin? 是的,但是我应该知道哪个是给管理员的,哪个是给客户或服务提供商的 也许你应该像用户一样改变你的出价。然后你可以按类型过滤它们 【参考方案1】:

我不确定您是否想要单独的列表或获取所有出价然后检查,所以我都做了。它们都适用于您提供的示例表。

$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

让我知道你的想法。

【讨论】:

【参考方案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();

【讨论】:

以上是关于如何为不同类型的用户制作出价表结构的主要内容,如果未能解决你的问题,请参考以下文章

如何为用户实现关注者,如在 twitter 中

mysql设计表结构数据类型的选择

如何为 AS400 表创建 SQL 触发器

如何为单列和双列节点c ++构造模板层次结构

如何为两个不同实体之间的复杂消息系统设计表?

如何为 POS 系统设计出色的数据库结构