我在Laravel中展示一对一关系时遇到问题。
我在DB中有这些表: 制造商使用默认的Laravel id列和 cashregisters ,其manufacturer_id列与制造商表中的id相关联。
在模特中我这样做:
一下现金出纳机
class Cashregister extends Model
{
protected $table = "cashregisters";
public function manufacturer(){
return $this->hasOne('App\Manufacturer','id');
}
}
制造商
class Manufacturer extends Model
{
protected $table = "manufacturers";
public function cashregisters(){
return $this->belongsTo('App\Cashregister');
}
}
我认为这没关系。接下来我在CashregisterController中执行index():
$cashregisters = Cashregister::all();
return view('cashregisters.index')->withCashregisters($cashregisters);
在cashregisters index中查看我做的循环:
<tbody>
@foreach ($cashregisters as $cashregister)
<tr>
<th>{{ $cashregister->id }}</th>
<td>{{ $cashregister->manufacturer_id }}</td>
......
<td>{{ $cashregister->DataNastPrzegUrzFisk }}</td>
@endforeach
</tr>
</tbody>
它很棒。显示 cashregisters 表中的所有内容。
我想显示制造商名称而不是manufacturer_id,所以我尝试这样做:
<td>{{ $cashregister->manufacturer->name }}</td>
我有错误。
接下来我搜索互联网并尝试做那件事
@foreach ($cashregisters as $cashregister)
<tr>
<th>{{ $cashregister->id }}</th>
@foreach ($cashregister->manufacturer() as $item)
<td>{{ $item->name}}</td>
@endforeach
......
<td>{{ $cashregister->DataNastPrzegUrzFisk }}</td>
@endforeach
</tr>
</tbody>
但是这段代码没有显示任何内容:(任何人都可以帮我解决这个问题。当我在所有表格之后执行该代码时:
<td>{{ $cashregister->manufacturer->name}}</td>
它显示了一些信息,所以我认为关系没问题。
答案 0 :(得分:2)
您需要为制造商设置本地密钥,如下所示:
class Cashregister extends Model
{
protected $table = "cashregisters";
public function manufacturer(){
return $this->hasOne('App\Manufacturer','id', 'manufacturer_id');
}
}
答案 1 :(得分:0)
使用with()
加载关系:
$cashregisters = Cashregister::with('manufacturer')->all();
然后这将显示制造商:
$cashregister->manufacturer->name