Laravel中数据透视表的访问关系

时间:2018-09-14 14:14:38

标签: php laravel relationship

我有三个模型BillProductProcessBillProduct有ManyToMany关系,数据透视表有一些额外的字段。我编写Bill模型类,如下所示:

<?php
    class Bill extends Model
    {
           function products(){
                return $this->belongsToMany(\App\Product::class)
                    ->withPivot('process_id') // the id of the Process 
                    ->withTimestamps();
            }
    }

Process模型是带有idname的简单表。我正在关联数据透视表中的ID以引用流程,该名称可能会随时间变化,但仍引用相同的概念,因此我无法关联该名称。

单个Bill的显示页面列出了与表相关的产品,如下所示:

@foreach($bill->products as $product)
     <tr>
        <td>{{$product->barcode}}</td>
        <td>{{$product->pivot->process_id}}</td> 
     </tr>
@endforeach

所以问题是我需要进程的名称,但是我有ID。我不确定如何命名。

谢谢

1 个答案:

答案 0 :(得分:1)

如果没有与Process的直接关系,则可能需要在Product模型上添加一个辅助函数,以获得Process的名称。

在您的产品型号中:

public function processName($processId) {
    return Process::where('id', $processId)->pluck('name')->first();
}

您认为:

<td>{{$product->processName($product->pivot->process_id) }}</td> 

也许有更好的方法,但是应该可以用这种方法。