Использование помощника по дате для указания месяца или Laravel / Eloquent Issue? - PullRequest
0 голосов
/ 27 сентября 2018

Я провел несколько поисков по этому вопросу и продолжаю быть в тупике.Я не уверен, является ли это проблемой date (), или проблемой laravel / eloquent.

Справочная информация:

У меня есть три таблицы.Таблица «врач», которая имеет отношение «принадлежат к многим», и обратно «таблица пациентов».Затем таблица «рецептов», принадлежащая «пациенту».На модели «Доктор» я создал ярлык из таблицы «Доктор» к рецептам:

public function prescriptions() {
    $this->load(['patients.prescriptions' => function($query) use (&$relation) {
        $relation = $query;
    }]);

    return $relation;
}

Я пытаюсь добиться того, чтобы подсчитать, сколько раз дата - в текущем месяце -в столбце «prescribe_date» таблицы рецептов. Так, если доктор отправил 10 рецептов в августе и 5 в сентябре, он должен показать 5 (так как мы в настоящее время в сентябре).

Вот как выглядит моя Dashboard:

$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 (), или проблема с моим синтаксисом laravel / eloquent, или что-то связанное с отношениями с базой данных. Спасибо!

Обновление

Я пытаюсь использоватьФункция date () внутри функции where длявытяните текущий месяц из столбца даты «прописать», затем используйте «9» в качестве симуляции текущего текущего месяца.

Ответы [ 4 ]

0 голосов
/ 27 сентября 2018

Используйте это условие where.

->whereRaw('MONTH(prescriptions.prescibe_date) = MONTH(CURDATE())');

Будет выполнено сравнение внутри базы данных, и вы получите желаемое.

0 голосов
/ 27 сентября 2018

Вы должны изменить строку:

<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' на где?что ты пытался получить?

0 голосов
/ 27 сентября 2018

Возможное решение вашей проблемы:

Вместо того, чтобы получить номер месяца, получите первый и последний день месяца

// 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();
0 голосов
/ 27 сентября 2018

Вы используете функцию where неправильно.

where(date('m', strtotime($doctor->prescriptions()->prescribe_date)), '9')

должно быть как:

where('column_name or key_name' , $value_that_youre_looking_for)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...