Сводная таблица для проверки доступности пользователя - PullRequest
0 голосов
/ 26 июня 2019

Я создаю сайт вакансий. Клиенты должны иметь возможность искать (вводить флажки) наличие подрядчиков для определенных дней недели.

Я подумываю о создании сводной таблицы для хранения данных о доступности. Столбец идентификатора, представляющий дни недели, столбец доступности, показывающий значение true или false, и идентификатор user_id для идентификатора подрядчика.

Я просто не уверен, что это правильный способ сделать это. Не должен ли столбец user_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');
    });

1 Ответ

0 голосов
/ 26 июня 2019

Выберите свой яд:

как целое число с побитовым поиском

single table

// 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;

Запись за день

oneToMany

Только одна запись на пользователя

OneToOne

...