抛出:试图获取非对象的属性“ jenis_bahan”

时间:2019-06-26 17:20:06

标签: php laravel eloquent

BahanLab的模型

protected $table = 'bahan_labs';
protected $primaryKey = 'kode_bahan';
protected $fillable = ['kode_bahan', 'nama_bahan', 'kode_sinta', 'kode_jenis', 'harga_bahan', 'stok', 'satuan', 'minimum_stok'];
public $timestamps = false;

public function jenis()
{
    return $this->belongsTo('App\JenisBahan', 'kode_jenis');
}

JenisBahan的模型

protected $table = 'jenis_bahans';
protected $primaryKey = 'kode_jenis_bahan';
protected $fillable = ['kode_jenis_bahan', 'jenis_bahan'];
public $timestamps = false;

public function bahans()
{
    return $this->hasMany('App\BahanLab');
}

我非常确定这是正确的,我已经定义了这些表之间的关系。但是,当我尝试执行循环echo $ bahan-> jenis-> jenis_bahan时,它将引发异常。

我已经尝试过建议做dd($ bahan-> jenis-> jenis_bahan),但是我得到了null,那么到底发生了什么?

更新

控制器:

$bahans = BahanLab::with('jenis')->get();
return view('bahan.daftar-bahan', compact('bahans'));

查看:

<tbody>
@foreach($bahans as $bahan)
<tr>
    <td>{{ $bahan['kode_bahan'] }}</td>
    <td>{{ $bahan['nama_bahan'] }}</td>
    <td>{{ $bahan->jenis->jenis_bahan }}</td>
    <td>{{ $bahan['harga_bahan'] }}</td>
    <td>{{ $bahan['stok'] }} {{ $bahan['satuan'] }}</td>
</tr>
@endforeach

2 个答案:

答案 0 :(得分:0)

自循环以来,您的$bahan对象之一没有jenis对象(意味着$bahan->jenisnull,因此您无法访问{ jenis_bahan是非对象的{1}}。要解决此问题,请避免加载null,除非它有一个$bahans,或者在循环中进行检查:

jenis

Controller

或者,在您看来:

$bahans = BahanLab::has('jenis')->with('jenis')->get();
return view('bahan.daftar-bahan', compact('bahans'));

注意:如果使用<tbody> @foreach($bahans as $bahan) <tr> <td>{{ $bahan['kode_bahan'] }}</td> <td>{{ $bahan['nama_bahan'] }}</td> @if($bahan->jenis) <td>{{ $bahan->jenis->jenis_bahan }}</td> @else <td>No Jenis...</td> @endif <td>{{ $bahan['harga_bahan'] }}</td> <td>{{ $bahan['stok'] }} {{ $bahan['satuan'] }}</td> </tr> @endforeach ,则不需要进行@if()检查。

此外,您可以同时使用->has('jenis')->with()->has()将查询结果限制为具有->has()关系的查询结果,jenis急于加载它以提高大型数据集的性能。

答案 1 :(得分:0)

之所以发生,是因为我的表I是一个字符串,而不是增量Integer。 所以要解决这个问题,我只需要设置

public $incrementing = false;