【问题标题】:Trying to get property 'layanan' of non-object in laravel试图在laravel中获取非对象的属性'layanan'
【发布时间】:2020-04-29 12:20:05
【问题描述】:

我想查询从其他表中引用的数据,但我得到了这个:

“试图获取非对象的属性'layanan'”。

所以,我有 2 张桌子,Objeks 和 Layanans。 Layanans 可以有很多 Objeks,我已经创建了它的外键,并且查询正在数据库中工作,但是当我想从 Layanans 获得的 foreach Objeks 和 foreach nama_layanan 时,它给了我错误...

这里是细节

拉亚南表

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

对象表

$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

这里有什么问题?

【问题讨论】:

    标签: php laravel eloquent laravel-6


    【解决方案1】:

    在这一行:

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

    您正在从循环内的item 数据中提取objeks集合。该集合将没有属性layanan,它有一堆objeks

    如果您想访问layanan 属性,则必须在此循环中循环objeks,或调用first() / where() 以访问特定单 em> 该级别的对象。

    此外,您还没有展示如何获得$data。在$item 的该实例中,您实际上可能没有任何objeks,这将导致您遇到的确切错误。如果这个特定的item 上有空的objeks,则不能从中拉取属性。

    【讨论】:

    • 这就是我得到它的方式
    • 公共函数对象(){ $objek = \App\Objek::all();返回视图 ('pages.alat.object.object')->with('data',$objek); }
    • 好的。你有一个objeks 的集合,但是当你循环时,你正在拉动$item-&gt;objeks。没有次要对象或集合。试试看:&lt;td&gt;{!! $item-&gt;layanan-&gt;nama_layanan !!}&lt;/td&gt;
    • @agastyarimbawa -- 上面的修复成功了吗?
    • 我做了你之前说的,现在它说试图获取非对象的属性'nama_layanan'...我需要调用'use App\Layanan'并声明'$layanan = \App \拉亚南::all();'在我的控制器和功能中?
    猜你喜欢
    • 2015-08-19
    • 2018-02-21
    • 2015-09-22
    • 2017-03-20
    • 2014-03-25
    • 2015-01-25
    • 2014-06-23
    相关资源
    最近更新 更多