Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 17.11.2017 06:55:52

Как выбрать незанятые значения для уникального поля?

<?
две таблицы
аккаунты
ид
имя
ид_машины(уникальный)

машины
ид
номер машины

каждому человеку уникальная машина, не может быть у двух одинаковой, это решено на уровне базы.
машин там есть с избытком.
Теперь задача появился новый человек, как мне брать ему машину я делаю так.

$alredyuse = \App\Acaunt::whereNotNull("car_id")->pluck("car_id")->all();
// выбираются все машины уже занятые
$car          = \App\Car::whereNotIn('id', $alredyuse)->firstOrFail();
//берем тачку исключя занятые

сейчас у мня в первой 100 и во второй 1500 записей и уже в момент запроса проц умирает, чувствуется как начинает крутить на 100%, хотя он i7-6700K относительно современный, а планируется гдет 10к и 20к записей.

Вопрос как решаются такие задачи вообще в крупных системах, то есть как вбирать незанятые. Мне кажется ошибка тут даже в первой строчке, нельзя делать такие запросы в коде чтобы в памяти переменной была вся таблица фактически.

Не в сети

#2 17.11.2017 09:17:39

Re: Как выбрать незанятые значения для уникального поля?

почему не добавить поле занята машина или нет?

Не в сети

#3 17.11.2017 09:26:12

Re: Как выбрать незанятые значения для уникального поля?

почему не добавить поле занята машина или нет?

это не безопасно, нет гарантии что в момент удаления юзера, или в момент смены машины у юзера, все будет проставлено как нужно. Тут вопрос не тока в том что программист забудет, а в том что в случае лага на сервере может проявится висяк который будет накапливаться.

Не в сети

Подвал раздела