Как сделать несколько оговорок where и получить только первое - PullRequest
1 голос
/ 17 июня 2019

Я пытался выполнить предложение множественного числа, но не смог.Я хочу проверить, совпадает ли текущая дата пользователя с create_at, и второе предложение будет, если у пользователя есть запись по идентификатору пользователя.Я работаю над фитнес-приложением, в котором Пользователь может отследить пройденный километр.А скорее для создания в таблице базы данных новых записей просто добавьте их в существующие записи.Мой вопрос сосредоточен на проблеме с предложением if, потому что переменная $hasUserEntries не равна нулю, но в таблице базы данных нет записи.Он пуст.

Я попытался вместо get() Я использовал first().Но проблема в том, что я не смог использовать Carbon::today() или, может быть, я использовал 3 значения в предложении where, которые мне нужны, потому что я не могу получить created_at дату только Date YYYY-MM-DD .В операторе first() я использовал твердо закодированный DateTime для проверки с created_at, и это сработало.Но я думаю, что не должен объяснять, почему жесткий код не оптимален.

Я искал в Stackoverflow и обнаружил, что большинство ответов касалось использования get().Это нормально, но почему мой else срабатывает, потому что, с моей точки зрения, база данных пуста (пусто), поэтому if($hasUserEntries==null) должен срабатывать.

public function add_km_to_progressbar(Request $request, TrackKM $trackKM)
{
    $track_dailies = new TrackDaily();
    $track_dailies->user_id = \Auth::user()->id;

    $amount_runned_km = $request->input('amount_runned_km');
    $amount_runned_km = (int)$amount_runned_km;

    $track_dailies->amount = (int)$amount_runned_km;

    $track_dailies->type = 1;

    $check_requirements = [
        'user_id'=>\Auth::user()->id,
        'created_at'=>'Carbon::today()'
    ];

    $hasUserEntries = DB::table('track_dailies')
                        ->where('user_id','=',\Auth::user())
                        ->where('created_at','>=',Carbon::today())
                        ->get();

    if ($hasUserEntries == null) {

        return dd('does not work');
    } else {

        return dd('does work');
    }
}

Ожидаемый результат должен вызывать оператор if, потому что, если таблица базы данных пуста, идентификатор пользователя не существует, или дата create_at не совпадает с текущей датой, то должна срабатывать if($hasUserEntries==null).Я хочу создать там новую строку, если это условие == null в базе данных.

Фактический результат if($hasUserEntries==null) имеет значение true, хотя таблица базы данных пуста.Я думаю, что метод get() имеет сохраненные значения, которые не связаны с базой данных.

Я надеюсь, что вы можете мне помочь.

Ответы [ 3 ]

1 голос
/ 17 июня 2019

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

 $checkifuserExist= DB::table('track_dailies')->where('user_id','=',\Auth::user())->where('created_at','>=',Carbon::today())->count();
if($checkifuserExist>0)
{
   //proceed to query for fitness
}
else
{
  //do something else...
}

с этим она не выдаст ошибку!

0 голосов
/ 17 июня 2019
$checkifuserExist= DB::table('track_dailies')->where('user_id','=',\Auth::user())->where('created_at','>=',Carbon::today())->count();
if($checkifuserExist>0)
{
   //if user really exists
     if( $hasUserEntries = DB::table('track_dailies')->where('user_id','=',\Auth::user())->where('created_at','>=',Carbon::today())->first())
       {
             //update the value of the amount
       }
      else{

           //insert new record

         }

}
else
{

  // if the user does not exist, do something else...
}

помните, что запись user_id никоим образом не будет нулевой, потому что сначала должна быть запись внутри db

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

Попробуйте, если case intead:

if (is_empty($hasUserEntries))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...