【问题标题】:What is the best way to store an array with id's related to another table in a MySQL database?存储与 MySQL 数据库中另一个表相关的 id 数组的最佳方法是什么?
【发布时间】:2019-07-11 14:36:59
【问题描述】:

我正在使用 Laravel 构建一个应用程序来预测比赛结果的顺序。所以我制作了一个包含参与者的表格,现在我希望用户预测参与者的结果顺序并将其保存到数据库中。

例如,有 6 个参与者(在数据库表中),我想预测结果。我会说:

  1. 参与者 4
  2. 参与者5
  3. 参与者2
  4. 参与者 1
  5. 参与者6
  6. 参与者 3

我创建了一个名为“预测”的表格,我想在其中保存一个“用户 ID”和预测。实际上它是一个包含参与者 ID 的数组。但是保存和检索它的最佳方法是什么?

非常感谢您的帮助。

罗纳德。

【问题讨论】:

  • 3 列; user_idparticipant_idplacementUser可以有多个Prediction,每个Prediction有一个Participant,显示的时候按placement排序返回的predictions。一般来说,尽量避免将数组保存到数据库中,并使用适当的关系数据库实践。
  • 哇,这实际上是非常简单但可靠的解决方案。所以你建议使用数据透视表?
  • 我想会的;命名约定和表格将是非标准的(通常您会命名数据透视表,因为它与它链接的表格相关,例如users_participants),但它仍然是User 和@987654333 之间的many-to-many @,带有用于指定顺序的附加列。
  • 谢谢!我使用它进行了管理,但不是使用多对多,而是使用了 belongsTo。一个用户可以做出一个预测,所以一个用户有很多预测(因为多行),但是一个预测属于一个用户并且属于一个参与者。
  • 不错!我认为这就是我在第一条评论中所逃避的,但是如果没有架构/模型等等,它会有点难以可视化。真高兴你做到了。非常欢迎您将您如何完成此作为自我回答发布(包括架构或本地/外键值,如果可以的话,还包括具有关系逻辑的模型)

标签: mysql database relationship


【解决方案1】:

感谢蒂姆的回答,我当然会告诉你我做了什么。

所以我有一个普通的用户模型和一个参与者模型。我需要的是预测参与者模型的结果/排名的用户之间的联系:

示例: - 我是用户(罗纳德) - 有 6 名参与者(P1、P2、P3、P4、P5、P6) - 我必须预测参与者将“越过终点线”的顺序。

因此,根据 Tim 的建议,我制作了一张表格,名为“预测”,带有模型 Prediction。我将在那里存储用户 - 参与者 - 预测排名。

在不久的将来,我将看看如何存储多个预测。目前还可以!

架构将如下所示:

Schema::create('predictions', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->unsignedBigInteger('user_id');
    $table->unsignedBigInteger('participant_id');
    $table->unsignedTinyInteger('position');
    $table->foreign('user_id')
        ->references('id')
        ->on('users');
    $table->foreign('participant_id')
        ->references('id')
        ->on('participants');
    $table->timestamps();
});

这就是预测模型的样子:

class Prediction extends Model
{
    public function user()
    {
        return $this->belongsTo('App\User');
    }

    public function participant()
    {
        return $this->belongsTo('App\Participant');
    }
}

因此,当我登录后,我可以通过以下操作得到我的预测:

Auth::user()->predictions()->orderBy('position')->get();

当我有一个预测时,我可以通过以下方式获得预测的参与者:

$prediction->participant;

以及预测的用户:

$prediction->user;

但现在我只能对每个用户进行一次预测。我必须找到一种方法将用户链接到预测,然后将参与者 - 位置组合链接到预测。

所以我可以说得到用户的所有预测。也许有人(或蒂姆;))有建议?!

谢谢你,我希望有人能在我的回答中找到一些答案。

干杯。

【讨论】:

    猜你喜欢
    • 2016-08-09
    • 2021-04-21
    • 2020-04-08
    • 2010-11-25
    • 2012-03-07
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    相关资源
    最近更新 更多