【问题标题】:Pivot table to check user's availability用于检查用户可用性的数据透视表
【发布时间】:2019-11-08 17:54:56
【问题描述】:

我正在制作一个求职网站。客户需要能够搜索(复选框输入)一周中某些天的承包商的可用性。

我正在考虑制作一个数据透视表来存储可用性。 ID 列代表星期几,Availability 列显示 true 或 false,user_id 代表承包商的 ID。

我只是不确定这样做是否正确。 user_id 列不是必须存储多个用户 ID 吗?能做到吗?

用户迁移:

Schema::create('users', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password', 255);
        $table->string('address_address')->nullable();
        $table->double('address_latitude')->nullable();
        $table->double('address_longitude')->nullable();
        $table->rememberToken();
        $table->timestamps();
    });

user_availability 表:

Schema::create('user_availability', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('Days');
        $table->foreign('user_id')
        ->references('id')
        ->on('users')
        ->onDelete('cascade');
    });

【问题讨论】:

  • 有很多方法可以解决这个问题。真的说什么是最好的方法太主观了。想想过滤数据的最简单方法是什么。
  • 我认为这是一个多对多的关系?我不知道如何存储数据。

标签: laravel laravel-migrations


【解决方案1】:

选择你的毒药:

作为按位搜索的整数

// Constant values
$MONDAY = 0x01
$TUESDAY = 0x02
$WEDNESDAY = 0x04
$THURSDAY = 0x08
$FRIDAY = 0x10
$SATURDAY = 0x20
$SUNDAY = 0x40

// setting multiple days
$days = $MONDAY | $TUESDAY | $FRIDAY;

// check if a specific day is part of the days
if (($days & $Monday) == $Monday) {
   echo 'available on a Monday';
}

所有日子都必须可用:

SELECT * FROM user WHERE availability & :days;

有些日子必须有空

SELECT * FROM user WHERE (availability | :days) > 0;

不可用

SELECT * FROM user WHERE availability = 0;

每个可用天的记录

每个用户只有一条记录

【讨论】:

  • 这对我很有帮助,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 2021-11-07
  • 2015-01-05
相关资源
最近更新 更多