Php 如何生成多个where子句并仅获取第一个where子句
我试图完成一个多where子句,但失败了。我想检查用户的当前日期是否等于created_at,第二条是用户是否有用户id的条目。我正在开发一个健身应用程序,用户可以跟踪他跑步的公里数。而要在数据库表中创建新条目,只需将它们添加到现有条目中即可。 我的问题集中在if子句的问题上,因为变量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子句中使用了我需要的
$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