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
答案 0 :(得分:0)
自循环以来,您的$bahan
对象之一没有jenis
对象(意味着$bahan->jenis
是null
,因此您无法访问{ 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;