Проблема с красноречивыми отношениями - PullRequest
0 голосов
/ 12 октября 2018

Я новичок в Laravel и столкнулся с проблемой в отношениях Eloquent.Я занимаюсь разработкой веб-сайта, на котором у пользователей / врачей много записей пациентов.Поэтому я хочу установить отношения один ко многим с моделью пользователя и пациента.Проблема в том, что я получаю все данные о пациенте, принадлежащие каждому пользователю / врачу, где мне, очевидно, нужны только данные о пациенте, принадлежащие этому аутентифицированному пользователю / врачу.Что я здесь не так делаю?

Это мой файл модели пользователя.User.php.

class User extends Authenticatable{
use Notifiable,SoftDeletes;

protected $fillable = [
    'name', 'email', 'password',
];

protected $hidden = [
    'password', 'remember_token',
];

public function patient()
    {
        return $this->hasMany('Bioctor\patient','user_id');

        //return $this->belongsTo(patient::class);
    }
}

Это модель пациента.Patient.php.

class patient extends Model{
use SoftDeletes;

   protected $fillable = [
     'user_id','patient_name', 'slug', 'age', 'sex', 'case_title','case_des','blood_group','report_image_url'
   ];

   public function user()
    {
      //  return $this->belongsTo();

       // return $this->hasMany(User::class);
    }
}

Это код моего контроллера пациента.

class PatientController extends Controller{

public function __construct()
{
    $this->middleware('auth');
}

public function index()
{
    return response()->json(User::with(['patient'])->get());      
}

public function create()
{
    return view('patient.patientInput');
}

public function store(CreatePatientRequest $request)
{        

    $request->uploadPatientImage()
            ->storePatientImage();    
    return redirect()->back();
}

public function show($id)
{
    //
    //dd(User::with(['patient'])->get());
}

public function edit($id)
{
    //
}

public function update(Request $request, $id)
{
    //
}

public function destroy($id)
{
    //
}
}

Это то, что я получаю по адресу edit.index Ior PatientController @ Index.Это вывод JSON в моем браузере.У меня есть два пользователя и четыре пациента в базе данных.Я получаю все записи пациентов каждого пользователя.

[{"id":1,"name":"rnlio1995","email":"rnlio1995@gmail.com","email_verified_at":null,"deleted_at":null,"created_at":"2018-10-10 15:36:58","updated_at":"2018-10-10 15:36:58","patient":[{"id":1,"user_id":"1","patient_name":"aaaaaaaaaaaaa","slug":"aaaaaaaaaaaaa","age":"44","sex":"Male","case_title":"cough","case_des":"fsfsdfdsf","blood_group":"A+","report_image_url":"patient\/aaaaaaaaaaaaa.jpg","deleted_at":null,"created_at":"2018-10-10 15:37:38","updated_at":"2018-10-10 15:37:38"},{"id":2,"user_id":"1","patient_name":"noor","slug":"noor","age":"7","sex":"Male","case_title":"cough","case_des":"hgfhfhf","blood_group":"A+","report_image_url":"patient\/rnlio1995_5bbf878505fa8.jpg","deleted_at":null,"created_at":"2018-10-11 17:25:25","updated_at":"2018-10-11 17:25:25"},{"id":3,"user_id":"1","patient_name":"noor","slug":"noor","age":"44","sex":"Male","case_title":"cough","case_des":"yuyguyguy","blood_group":"A+","report_image_url":"patient\/rnlio1995_5bbf8c18e75cc.jpg","deleted_at":null,"created_at":"2018-10-11 17:44:56","updated_at":"2018-10-11 17:44:56"}]},{"id":2,"name":"noor","email":"rn19@gmail.com","email_verified_at":null,"deleted_at":null,"created_at":"2018-10-11 17:47:01","updated_at":"2018-10-11 17:47:01","patient":[{"id":4,"user_id":"2","patient_name":"noor","slug":"noor","age":"55","sex":"Male","case_title":"cough","case_des":"hihiuh","blood_group":"A+","report_image_url":"patient\/noor_5bbf8cae477eb.jpg","deleted_at":null,"created_at":"2018-10-11 17:47:26","updated_at":"2018-10-11 17:47:26"}]}]

Это изображение вывода. вывод JSON

1 Ответ

0 голосов
/ 12 октября 2018

Если вам нужны только данные о пациентах, вы не хотите использовать with.->with() означает, что вы хотите получить ваши данные вместе с указанными вами отношениями.Вот почему User::with(['patient'])->get() выдаст вам всех пользователей вместе со всеми данными пациентов.

Кроме того, поскольку у вас, вероятно, есть несколько пациентов на одного врача, вы должны определить отношения, используя patients() (множественное число), чтобы прояснить ситуацию:

public function patients()
{
    return $this->hasMany('Bioctor\Patient', 'user_id');
}

Затем вы можете использовать следующий код для получения пациентов указанного пользователя:

//find specified user
$user = User::findOrFail($id)

//fetch relations
$patients = $user->patients

foreach ($patients as $patient) {
    //do what you intend to do with each patient
}

Обратите внимание, что мы не используем patients() с круглыми скобками, мы просто получаем отношение как нормальноесвойства.Конечно, вы должны указать $id или использовать Laravel 'Auth::user() фасад, чтобы получить указанного / аутентифицированного пользователя.

Для получения дополнительной информации ознакомьтесь с официальным руководством по этому вопросу: Laravel Eloquent Relationships

...