【问题标题】:How to fetch data in one object using laravel relation ship如何使用 laravel 关系在一个对象中获取数据
【发布时间】:2019-07-15 13:37:35
【问题描述】:

以前我使用如下查询获取数据

          $specialitiesAndRoles = DB::table('user_facility')
        ->leftjoin('roles', 'user_facility.role_id', 'roles.id')
        ->leftjoin('specialities','user_facility.speciality_id','=','specialities.id')
        ->leftjoin('available_specialties','specialities.available_specialties_id' ,'=','available_specialties.id')
        ->where('user_facility.user_id', $user_id)
        ->select('user_facility.facility_id','user_facility.speciality_id','user_facility.is_facility_supervisor','user_facility.priv_key','user_facility.role_id','specialities.name','available_specialties.id','available_specialties.specialty_key')
        ->get();

 $specialities = (object)$specialitiesAndRoles;

         $response = ['facilities' => $specialities];

我的回答是:

                "facilities": [
            {
                "facility_id": 59,
                "speciality_id": 1,
                "is_facility_supervisor": 0,
                "priv_key": "can_access_patient",
                "role_id": 2,
                "name": "Medical",
                "id": 1,
                "specialty_key": "medical_doctor"

现在我正在使用关系并试图获得相同的响应:

我的关系代码:

            $specialitiesAndRoles = UserFacility::with([
        'speciality' => function($q)
        {
            $q->select('id','speciality_key');
        },
        'roles' => function($q)
        {
            $q->select('id','name');
        },
        'availableSpeciality' => function($q)
        {
            $q->select('id','specialty_key');
        }])->get();

我使用关系的响应变成了下面的每个对象

            "facilities": [
            {
                "id": 2,
                "user_id": 32,
                "facility_id": 59,
                "speciality_id": 1,
                "is_facility_supervisor": 0,
                "priv_key": "can_access_patient",
                "role_id": 2,
                "is_admin": null,
                "created_at": "2019-07-15 11:30:13",
                "updated_at": "2019-07-15 11:30:13",
                "isDeleted": null,
                "created_by": null,
                "updated_by": null,
                "is_primary": 0,
                "speciality": {
                    "id": 1,
                    "speciality_key": "medical_doctor"
                },
                "roles": {
                    "id": 2,
                    "name": "Admin"
                },
                "available_speciality": {
                    "id": 2,
                    "specialty_key": "accu"
                },

我不想在来自不同表的每个数据上创建对象,我只想做出与我使用查询和上面共享的相同的响应。

如何使用关系做出此响应? 您的帮助将不胜感激 提前致谢。

【问题讨论】:

    标签: php laravel object relationship


    【解决方案1】:

    您可以简单地将查询更改为:

    use App\Models\UserFacitily;
    
        $facilities = UserFacility::leftJoin('roles', 'user_facility.role_id', 'roles.id')
            ->leftJoin('specialities','user_facility.speciality_id','=','specialities.id')
            ->leftJoin('available_specialties','specialities.available_specialties_id' ,'=','available_specialties.id')
            ->where('user_facility.user_id', $user_id)
            ->select('user_facility.facility_id','user_facility.speciality_id','user_facility.is_facility_supervisor','user_facility.priv_key','user_facility.role_id','specialities.name','available_specialties.id','available_specialties.specialty_key')
            ->get();
    
    

    【讨论】:

      猜你喜欢
      • 2021-05-23
      • 1970-01-01
      • 2019-07-13
      • 1970-01-01
      • 2020-11-07
      • 2019-04-23
      • 2017-07-16
      • 1970-01-01
      • 2018-10-24
      相关资源
      最近更新 更多