У меня две таблицы: пациенты и приложения (назначения).Существует один: много отношений пациента: ок.Моя цель состоит в том, чтобы возвратить набор пациентов и из даты последнего и следующего посещения пациента.
Проблема / Проблема
Я получаю противоречивые результаты.Я просеял данные так, чтобы у каждого пациента были назначения в прошлом и будущем, но когда я использую Eloquent для запроса (см. «Контроллер» ниже), я не получаю «lastappt».Если я изменяю запрос для поиска по идентификатору пациента, я получаю lastappt.
Модель «пациента»
class Patient extends Model
{
...
public function appts()
{
return $this->hasMany('App\Models\Appt');
}
public function lastappt()
{
$now = Carbon::now();
return $this
->hasMany('App\Models\Appt')
->select(['id', 'patient_id', 'appt_date_time'])
->where('appt_date_time', '<', $now)
->orderBy('appt_date_time', 'desc')
->take(1);
}
public function nextappt()
{
$now = Carbon::now();
return $this
->hasMany('App\Models\Appt')
->select(['id', 'patient_id', 'appt_date_time'])
->where('appt_date_time', '>', $now)
->orderBy('appt_date_time', 'asc')
->take(1);
}
}
Миграция «Appts»
Schema::create('appts', function (Blueprint $table) {
$table->increments('id');
$table->integer('patient_id')->unsigned();
$table->integer('hospital_id')->unsigned();
...
$table->datetime('appt_date_time')->nullable();
...
$table->timestamps();
$table->index(['patient_id', 'hospital_id', 'appt_date_time']);
$table->foreign('patient_id')
->references('id')->on('patients')
->onDelete('cascade');
});
Контроллер
$currPatientCollection = Patient::with('lastappt')
->with('nextappt')
->where('office_id', $user->office_id)
->where('current_patient', true)
->orderBy('last_name')
->orderBy('first_name')
->get();
Это возвращает только nextappt, даже если база данных имела приложения в прошлом.Однако следующий запрос работает (как я и ожидал) и возвращает запись пациента с lastappt и nextappt.
$currPatientCollection = Patient::with('lastappt')
->with('nextappt')
->where('id', 1)
->where('current_patient', true)
->orderBy('last_name')
->orderBy('first_name')
->get();
Любая помощь будет принята с благодарностью и заранее благодарим вас!