繁体   English   中英

使用 Laravel Eloquent 关系(一对多/反向)访问所有数据

[英]Accessing all data using Laravel Eloquent relationship(one to many/Inverse)

我有两个型号,即医生 model 和医生室 model。 我使用 eloquent 一对多关系来满足拥有多个房间的医生的需求。 这是我的医生 model 的代码

class Doctors extends Model
{
    protected $primaryKey = 'doctor_id';
    public $timestamps = false;

    protected $fillable = [
        'first_name',
        'last_name',
        'specialization_id_fk',
    ];

    public function specializations() 
    {

        return $this->belongsTo('App\Specializations', 'specialization_id_fk');

    }

    public function doctorRooms()
    {

        return $this->hasMany('App\DoctorRooms', 'doctor_id_fk', 'doctor_id');

    }

}

这是我的医生房间 model

class DoctorRooms extends Model
{
    protected $primaryKey = 'doctor_room_id';
    public $timestamps = false;

    protected $fillable = [
        'room',
        'doctor_id_fk',
    ];


    public function doctorsInfo()
    {
        return $this->belongsTo('App\Doctors', 'doctor_id_fk', 'doctor_id');
    }
}

当我尝试访问我的 doctorRooms model 中的数据时,我不断收到“此集合实例上不存在属性 [房间]”。 这是我的医生代码 controller

class DoctorsController extends Controller
{
    public function index()
    {

        $doctors = Doctors::all();
        $rooms = DoctorRooms::all();

        foreach($doctors as $doctor) {
            echo $doctor->doctorRooms->room;
        }
    }

}

这是我将 $doctors 回显为 JSON 时的结果。

[ 
    { 
        "doctor_id":1,
        "first_name":"Aracely",
        "last_name":"Ullrich",
        "specialization_id_fk":12,
        "doctor_rooms":[ 
            { 
                "doctor_room_id":1,
                "room":"151",
                "doctor_id_fk":1
            },
            { 
                "doctor_room_id":3,
                "room":"152",
                "doctor_id_fk":1
            }
        ]
    },
    { 
        "doctor_id":2,
        "first_name":"Marjolaine",
        "last_name":"Sipes",
        "specialization_id_fk":21,
        "doctor_rooms":[ 
            { 
                "doctor_room_id":2,
                "room":"131",
                "doctor_id_fk":2
            }
        ]
    }
]

我可以使用 laravel 查询生成器来做到这一点,但为了 MVC,我坚持使用 laravel eloquent Z8B8A92C27C4DD79. 提前致谢!

您希望单个 model 的room属性而不是包含许多这些模型的集合上的属性。

foreach ($doctors as $doctor) {
    foreach ($doctor->doctorRooms as $room) {
        echo $room->room;
    }
}

$doctors是一个集合,每个医生都有一个 DoctorRoom 的集合来迭代。

不要忘记预先加载关系以从迭代中删除额外的查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM