Laravel刀片在@foreach循环中一对一的关系

时间:2016-12-18 16:11:16

标签: laravel blade laravel-5.3 laravel-blade

我在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>

它显示了一些信息,所以我认为关系没问题。

2 个答案:

答案 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