kwe*_*ble 2 collections laravel eloquent laravel-5
我的数据库表中有此列('time_out'):
正如你所看到的time_out
是null
,当我做这个查询:
$checkertimeout = Attendance::where('emp_id', $request->emp_id)
->where('attend_date', $date)->get(['time_out']);
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
[{"time_out":null}]
但是当我在一个 if-else statement:
if ($checkertimeout->isEmpty())
{
echo "works";
}
else
{
echo "wont work";
}
Run Code Online (Sandbox Code Playgroud)
它显示不起作用。
感谢任何帮助,我是 Eloquent 查询的新手:)
首先,当你这样做时:
$checkertimeout = Attendance
::where('emp_id', $request->emp_id)
->where('attend_date', $date)
->get(['time_out']); // <---
Run Code Online (Sandbox Code Playgroud)
您将获得符合您的条件(s)的每个模型的所有字段的集合。这意味着,像这样:time_out
Attendance
where
Run Code Online (Sandbox Code Playgroud)=> 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 部分获得更多信息。
现在,如果您的查询旨在仅获取一条记录,则可以使用该->first()
方法而不是一条记录get()
。此方法将返回Attendance
与您的条件匹配的第一个对象。
$checkertimeout = Attendance
::where('emp_id', $request->emp_id)
->where('attend_date', $date)
->first(); // <---
Run Code Online (Sandbox Code Playgroud)
PS:如果您只需要检索该time_out
值,您还可以将->select('attend_date')
加到查询中:
$checkertimeout = Attendance
->select('time_out'); // <---
::where('emp_id', $request->emp_id)
->where('attend_date', $date)
->first(); // <---
Run Code Online (Sandbox Code Playgroud)
有了这些澄清,让我们来回答你的问题。如果你想检查一个字段是否为空......你可以使用 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))
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
$checkertimeout = Attendance
->select('time_out'); // <---
::where('emp_id', $request->emp_id)
->where('attend_date', $date)
->first(); // <---
if(is_null($checkertimeout->time_out)) // <----
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
作为旁注,如果您想避免该值的空结果,您可以在查询中添加另一个约束:
$checkertimeout = Attendance
::where('emp_id', $request->emp_id)
->where('attend_date', $date)
->whereNotNull('time_out') // <-----
->get(['time_out']);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9539 次 |
最近记录: |