Доступ ко всем данным с использованием отношения Laravel Eloquent (один ко многим / обратный) - PullRequest
1 голос
/ 02 октября 2019

У меня есть две модели, а именно модель доктора и модель доктора_ комнаты. Я использовал красноречивые отношения один ко многим, чтобы обслуживать врачей, имеющих несколько комнат. Вот мой код для модели моего доктора

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');

    }

}

и вот для моей модели doctorRooms

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, я продолжаю получать "Property [room] не существует в этом экземпляре коллекции ". Вот мой код для моего контроллера врачей

class DoctorsController extends Controller
{
    public function index()
    {

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

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

}

Вот результат $ докторов, когда я отображаю его в формате 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 заболел придерживаться красноречивого ORM. Заранее спасибо!

1 Ответ

2 голосов
/ 02 октября 2019

Вы хотите, чтобы атрибут room отдельной модели не являлся атрибутом в Коллекции, содержащей многие из этих моделей.

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

$doctors - это Коллекция, и у каждого Доктора есть Коллекция DoctorRooms дляповторять.

Не забудьте загрузить загрузку, чтобы убрать лишние запросы из итераций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...