Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何生成多个where子句并仅获取第一个where子句_Php_Mysql_Laravel_Collections_Eloquent - Fatal编程技术网

Php 如何生成多个where子句并仅获取第一个where子句

Php 如何生成多个where子句并仅获取第一个where子句,php,mysql,laravel,collections,eloquent,Php,Mysql,Laravel,Collections,Eloquent,我试图完成一个多where子句,但失败了。我想检查用户的当前日期是否等于created_at,第二条是用户是否有用户id的条目。我正在开发一个健身应用程序,用户可以跟踪他跑步的公里数。而要在数据库表中创建新条目,只需将它们添加到现有条目中即可。 我的问题集中在if子句的问题上,因为变量$hasUserEntries不等于null,但数据库表中没有条目。它是空的 我尝试使用get()而不是first()。但问题是我无法使用Carbon::today(),或者可能是我在where子句中使用了我需要的

我试图完成一个多where子句,但失败了。我想检查用户的当前日期是否等于created_at,第二条是用户是否有用户id的条目。我正在开发一个健身应用程序,用户可以跟踪他跑步的公里数。而要在数据库表中创建新条目,只需将它们添加到现有条目中即可。 我的问题集中在if子句的问题上,因为变量
$hasUserEntries
不等于null,但数据库表中没有条目。它是空的

我尝试使用
get()
而不是
first()
。但问题是我无法使用
Carbon::today()
,或者可能是我在where子句中使用了我需要的3个值,因为我无法获得在
日期创建的
,只能获得日期YYYY-MM-DD。在
first()
语句中,我使用了一个硬编码的日期时间来检查
created\u At
,它成功了。但我想我不能解释为什么硬代码不是最优的

我搜索了Stackoverflow,发现大多数答案都是关于使用
get()
。这很好,但是为什么我的
else
会被触发,因为从我的角度来看,数据库是空的(Null),所以应该触发
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语句的触发,因为如果数据库表为空,用户id不存在,或者创建时间的日期与当前日期不一致,则应该触发if($hasUserEntries==null)
。如果数据库中的条件==null,我想在那里创建一个新行

实际结果
如果($hasUserEntries==null)
为真,即使数据库表为空。我认为方法
get()
保存了与数据库无关的值


我希望您能帮助我。

如果您有以下情况,请尝试:

if (is_empty($hasUserEntries))

我认为您应该做的是在继续之前检查数据库中是否存在该记录

 $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...
}
有了这个,它就不会抛出错误

$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的记录不可能为null,因为首先必须在db中有记录

,因为
get()
返回的是一个空集合,而不是
null
where('user_id','=',\Auth::user())
我认为这不应该起作用,user()不会简单地返回用户id,而是返回一个对象。因为数据库中没有条目,所以现在可以使用null。您只需先检查用户是否存在,然后再继续执行您想要达到的任何条件。为了改进您的答案,您只需将if条件更改为
if($checkIfuserExist)
。您无需添加
>0
条件,但它无法解决此问题。我检查null,因为如果用户有一行用于特殊日期(created_at==current_data),那么它应该更新amount的值,而不是向数据库添加新行。如果我使用你的代码,它不能解决它,我得到了同样的问题。如果我不清楚,请问我。该代码做的是首先检查用户是否存在于数据库中,如果它确实存在,做必要的。让我展示一下下面的一些代码
是空的
在Laravelw中不存在,如果他没有被创建,那么它将是空的还是不存在的?“这很好,但是为什么会触发我的else呢?因为从我的观点来看,数据库是空的(null),所以应该触发if($hasUserEntries==null)。($hasUserEntries==null)无法使用null触发,因为数据库中不存在记录。您需要先检查记录的存在性,然后再检查日期的存在性哦,好的,我会尝试一下,谢谢您的解释,它不会为空。当有记录且特定字段没有记录但为空时,它将为空。例如id:string,username:string,fname:null。id:-1,用户名:-john,fname:-null