Как объединить четыре запроса в laravel? - PullRequest
0 голосов
/ 24 января 2020

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

    $date = Carbon::today();
    $sta = \DB::table('ets')->where('user_id', $this->user->id)->where('created_at', '>=', $date)->get();
    $sta = \DB::table('ets_1x1')->where('user_id', $this->user->id)->where('created_at', '>=', $date)->get();
    $sta = \DB::table('ets_low')->where('user_id', $this->user->id)->where('created_at', '>=',$date)->get();
    $sta = \DB::table('ets_duel')->where('user_id', $this->user->id)->where('created_at', '>=', $date)->get();

if ($sta == NULL) {
                return response()->json(['status' => 'error', 'msg' => 'Error']);
            }

Этот код проверяет, есть ли запись пользователя в 4 возможных таблицах. Я сделал запись в таблице ets_1x1, но все равно не могу принять участие, потому что ошибка, похоже, не нашла меня в базе данных. Я удалил все таблицы и оставил только ets_1x1, и меня приняли в чертеж.

Насколько я понимаю, значение берется из последнего запроса. Как я могу объединить запрос в 1 и выполнить проверку этих 4 таблиц?

UPD:

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

    if(!empty($sta_1) || !empty($sta_2) || !empty($sta_3) || !empty($sta_4)) {
        return response()->json(['status' => 'error', 'msg' => 'Error']);
    }

Где моя ошибка?

1 Ответ

1 голос
/ 24 января 2020

Этот код не будет работать, потому что:

  1. Первый фрагмент кода будет оценивать только последний запрос (и последовательно, только если в последней таблице есть какой-либо существующий пользователь) .
  2. Второй фрагмент кода оценивается неправильно, вы запускаете пустую функцию в коллекции Laravel.

Почему бы вам не попробовать это? Я думаю, что это должно работать:

$date = Carbon::now();
$userExists = false;
$tables = ['ets', 'ets_1x1', 'ets_low', 'ets_duel'];

foreach ($tables as $tableName) {
    $result = \DB::table($tableName)
        ->where('user_id', $this->user->id)
        ->where('created_at', '>=', $date)
        ->get()
    ;
    if ($result->isNotEmpty()) {
        $userExists = true;
        break;
    }
}

if (!$userExists) {
    return response()->json(['status' => 'error', 'msg' => 'Error']);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...