Laravel получить родительские атрибуты - PullRequest
1 голос
/ 03 августа 2020

Я начал работать над небольшим проектом, у меня есть две модели здания и квартиры, в каждом здании может быть много квартир.

поэтому я создал взаимосвязь между моделями, но я получаю сообщение об ошибке при попытке доступ к родительскому (Building)

Это мои модели:

// Building.php

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;
use App\Apartment;

class Building extends Model
{
    protected $guarded = [];

    public function apartment(){
        return $this->hasMany(Apartment::class);
    }
}

// Apartment.php

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;
use App\Building;

class Apartment extends Model
{
    protected $guarded = [];
    
    public function building(){
        return $this->belongsTo(Building::class);
    }
}

Мой контроллер:

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Apartment;
use App\Building; 

public function index()
{
    $apartment = Apartment::with('building')->get();
    return $apartment->building;
}

Сообщение об ошибке: Property [building] does not exist on this collection instance.

Я хотел бы получить такой результат:

Building 1
   Apartment A
   Apartment b

Building 2
   Apartment A

Квартира б

1 Ответ

2 голосов
/ 03 августа 2020

Проблема в том, что метод get для получения коллекции квартир должен получать только квартиру, а затем получать из нее здание.

public function index()
{
    $apartment = Apartment::with('building')->first();
    return $apartment->building;
}

Метод get возвращает Illuminate\Support\Collection, содержащий результаты, где каждый результат является экземпляром объекта PHP stdClass. Вы можете получить доступ к значению каждого столбца, обратившись к столбцу как к свойству объекта:

$apartaments = Apartment::with('building')->get();

foreach ($apartments as $apartament) {
    echo $apartament->building;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...