Попытка получить свойство 'layanan' необъекта в laravel - PullRequest
1 голос
/ 12 января 2020

Я хочу получить доступ к данным, на которые ссылаются из другой таблицы, но я получаю это:

«Попытка получить свойство layanan не объекта».

Итак, у меня есть 2 таблицы, Objeks и Layanans. У Layanans может быть много Objeks, я уже создал его внешний ключ, и запрос работает в базе данных, но когда я хочу просмотреть Objeks и обратиться к nama_layanan, полученному от Layanans, это выдает мне ошибку ...

Вот подробности

Таблица Layanans

$table->bigIncrements('layanans_id');
            $table->string('nama_layanan');
            $table->timestamps();

Таблица Objeks

$table->bigIncrements('objeks_id');
            $table->unsignedBigInteger('nama_layanan');
            $table->string('tipe_objeks');
            $table->timestamps();

            $table->foreign('nama_layanans')->references('layanans_id')->on('layanans')
            ->onUpdate('cascade')
            ->onDelete('cascade');

Layanan . php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Layanan extends Model
{
    protected $fillable=[
        'nama_layanan'
    ];

    protected $primaryKey = 'layanans_id';

    public function objek() {
        return $this->hasMany(Objek::class);
    }
}

Objek. php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Objek extends Model
{
    protected $fillable=[
        'nama_layanan', 'tipe_objeks'
    ];
    protected $primaryKey = 'objeks_id';

    public function layanan() {
        return $this->belongsTo(Layanan::class);
    }
}

Это мой foreach object.blade. php

@foreach ($data as $item)                   
                <tr>
                  <td>{!! $item->objeks_id !!}</td>
                  <td>{!! $item->objeks->layanan->nama_layanan !!}</td>
                  <td>{!! $item->tipe_objeks !!}</td>
                </tr>
                @endforeach

в чем здесь проблема?

1 Ответ

0 голосов
/ 12 января 2020

В этой строке:

<td>{!! $item->objeks->layanan->nama_layanan !!}</td>

Вы извлекаете коллекцию из objeks из item данных в l oop. Коллекция не будет иметь свойства layanan, она имеет группу objeks внутри.

Если вы хотите перейти к свойству layanan, вам придется либо l oop на objeks в этом l oop, либо позвонить first() / where(), чтобы получить для указанного c одного объекта на этом уровне.

Кроме того, вы не показали, как вы получаете $data. Вполне возможно, что у вас фактически нет objeks в пределах этого экземпляра $item, что привело бы к точной вашей ошибке. Если в этом параметре есть ноль objeks c item, вы не сможете извлечь из него свойство.

...