我已经在此问题上进行了一些搜索,并继续感到困惑。我不确定这是date()问题,还是laravel /雄辩的问题。
背景:
我有三个桌子。带有“ toyants”表和来回关系的“ doctor”表。然后是属于“患者”的“处方”表。在Doctor模型上,我使用以下命令创建了从Doctor表到处方的快捷方式:
public function prescriptions() {
$this->load(['patients.prescriptions' => function($query) use (&$relation) {
$relation = $query;
}]);
return $relation;
}
我要达到的目的是计算处方表“ prescribe_date”列中某个日期(当月内)显示的次数。因此,如果医生在8月发送了10张处方, 9月中的5,应该显示5(因为我们目前在9月)。
这是我的仪表盘的样子:
$user = Auth::user();
$doctors = User::find(Auth::user()->id)->doctors()->orderBy('full_name', 'asc')->paginate(10);
return view('dashboard')->withDoctors($doctors);
这是我的dashboard.blade.php:
<table class="table table-hover table-sm">
<thead>
<tr>
<th scope="col">Doctor Name</th>
<th scope="col">Total Patients</th>
<th scope="col">Monthly Prescriptions</th>
<th scope="col">Date Doctor Added</th>
</tr>
</thead>
<tbody>
@foreach ($doctors as $doctor)
<tr>
<th scope="row">
<a href="{{route('doctors.show', $doctor->id)}}">{{$doctor->full_name}}</a>
</th>
<td>{{$doctor->patients()->count()}}</td>
// This is where I'm falling down
<td>{{$doctor->prescriptions()->where(date('m', strtotime($doctor->prescriptions()->prescribe_date)), '9')->count()}}</td>
<td>{{date('m-d-Y', strtotime($doctor->created_at))}}</td>
</tr>
@endforeach
</tbody>
</table>
这是它返回的错误:
Undefined property:
Illuminate\Database\Eloquent\Relations\HasMany::$prescribe_date
但是,如果我更改此行以反映真实的日期匹配,它将返回正确的计数:
{{$doctor->prescriptions()->where('prescribe_date', '1969-12-31')->count()}}
所以我不确定这是否是我的php date()函数的问题,或者是我的laravel /雄辩的语法问题,还是与数据库关系有关。谢谢!
更新
我正在尝试使用where函数中的date()函数从“规定”日期列中提取当前月份,然后将“ 9”用作当前实际月份的模拟。
答案 0 :(得分:2)
您使用的where
功能不正确。
where(date('m', strtotime($doctor->prescriptions()->prescribe_date)), '9')
应该像这样:
where('column_name or key_name' , $value_that_youre_looking_for)
答案 1 :(得分:0)
您应该更改以下行:
<td>doctor->prescriptions()->where(date('m',strtotime($doctor->prescriptions()->prescibe_date)), '9')->count()}}</td>
到
<td>{{$doctor->prescriptions()->where('prescibe_date', date('m',strtotime($doctor->prescriptions()->prescibe_date)))->count()}}</td>
这是因为,传递给where()的第一个参数必须是表字段名称,第二个参数必须是您要搜索的值。
在哪里出现“ 9”的原因是什么?你想得到什么?
答案 2 :(得分:0)
可能的解决方案是
获取月份的第一天和最后一天,而不是获取月份号
// get first day and last day
$first_day = date('Y-m-d', strtotime('first day of August'));
$last_day = date('Y-m-d', strtotime('last day of August'));
$doctor->prescriptions()->whereBetween('prescribe_date', [$first_date, $last_date])->count();
答案 3 :(得分:0)
使用此where子句。
LiveData
它将在数据库内部进行比较,并返回您想要的内容。