使用日期帮助器指定月份或Laravel /口才问题?

时间:2018-09-27 16:00:20

标签: php laravel eloquent

我已经在此问题上进行了一些搜索,并继续感到困惑。我不确定这是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”用作当前实际月份的模拟。

4 个答案:

答案 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

它将在数据库内部进行比较,并返回您想要的内容。