我的数据库表中有此列('time_out'):
您可以看到time_out
是null
,当我执行此查询时:
$checkertimeout = Attendance::where('emp_id', $request->emp_id)
->where('attend_date', $date)->get(['time_out']);
我得到以下输出:
[{“ time_out”:null}]
但是当我在if-else statement:
if ($checkertimeout->isEmpty())
{
echo "works";
}
else
{
echo "wont work";
}
显示不起作用。
感谢您的帮助,我是Eloquent查询的新手:)
答案 0 :(得分:3)
首先,当您这样做时:
$checkertimeout = Attendance
::where('emp_id', $request->emp_id)
->where('attend_date', $date)
->get(['time_out']); // <---
您将获得符合您的条件(time_out
)的每个Attendance
模型的所有where
字段中的Collection。意思是这样的:
=> Illuminate\Database\Eloquent\Collection {#3323 all: [ App\Attendance {#3332 attend_date: "2019-10-06 22:01:29", }, App\Attendance {#3340 attend_date: "2019-10-06 22:01:29", }, App\Attendance {#314 attend_date: null, }, ], }
您可以在文档的Eloquent section中获取更多信息。
现在,如果查询被设计为仅获取一条记录,则可以使用->first()
方法而不是get()
方法。此方法将返回与您的条件匹配的第一个Attendance
对象。
$checkertimeout = Attendance
::where('emp_id', $request->emp_id)
->where('attend_date', $date)
->first(); // <---
PS:如果只需要检索time_out
值,也可以将->select('attend_date')
添加到查询中:
$checkertimeout = Attendance
->select('time_out'); // <---
::where('emp_id', $request->emp_id)
->where('attend_date', $date)
->first(); // <---
有了这些澄清,让我们开始您的问题。如果要检查字段是否为空,则可以使用PHP函数is_null()
。
$checkertimeout = Attendance
::where('emp_id', $request->emp_id)
->where('attend_date', $date)
->get(['time_out']);
if(is_null($checkertimeout->first()->time_out))
{
// ...
}
$checkertimeout = Attendance
->select('time_out'); // <---
::where('emp_id', $request->emp_id)
->where('attend_date', $date)
->first(); // <---
if(is_null($checkertimeout->time_out)) // <----
{
// ...
}
请注意,如果要避免对该值返回空结果,可以在查询中添加另一个约束:
$checkertimeout = Attendance
::where('emp_id', $request->emp_id)
->where('attend_date', $date)
->whereNotNull('time_out') // <-----
->get(['time_out']);
答案 1 :(得分:0)
time_out
的事件为空,$checkertimeout
变量不为空。因为$checkertimeout
是一个集合。并且其中有一项。
如您所见,
[
{"time_out":null}
]
由于我不知道您要做什么,因此,如果仅在Attendance
不为null的情况下只希望time_out
,则可以执行此操作。
$checkertimeout = Attendance::where('emp_id', $request->emp_id)
->where('attend_date', $date)
->whereNotNull('time_out')
->get(['time_out']);
答案 2 :(得分:0)
首先,您的查询正在获取所有记录。
您应该在查询中这样做:
$checkerTimeOut = Attendance
::where([['emp_id', $request->emp_id], ['attend_date', $date]])
->first();
//这是为了获得一条记录
然后,如果您使用if else
语句,则还应该调用要稳定的列。
if($checkerTimeOut->time_out->isEmpty()
{
dd('not empty');
}
else
{
dd('this record is empty');
}
您也可以这样:
if($checkerTimeOut->time_out)
{
dd('not empty');
}
else
{
dd('this record is empty');
}
或者应该像这样:
$checkerTimeOut->time_out
? 'not empty'
: 'this record is empty';
答案 3 :(得分:0)
因为$ checkertimeout获得了一个收藏夹
[
{"time_out":null}
]
因此它不再为空,它将返回
"wont work"
答案 4 :(得分:0)
点击
$checkertimeout = Attendance::where('emp_id', $request->emp_id)
->where('attend_date', $date)->first();
{{ $checkertimeout->time_out !=null ? 'Wont Work' : 'work' }} // when this condition $checkertimeout->time_out !=null true its run after "?" when its false it's running after ":" term
对于控制器,您还可以如下所示dd或echo:
echo $checkertimeout->time_out !=null ? 'Wont Work' : 'work'; // you can replace echo with return too