从3个表中获取与具有haMany关系的一个表相关的数据

时间:2019-06-27 19:29:55

标签: php laravel eloquent

我有一个产品表,另外三个表(电压,安培,类别),现在产品表将这三个表与voltage,ampere,category hasMany ProductsProducts belongsTo voltage,ampere,category一一对应,每个表的id用作products_table : id,name,voltage_id,ampere_id,category_id等产品表中的外键。现在如何从这些表中获取所有数据并将其显示在产品的html表中。

产品型号

 public function ampere(){
    return $this->belongsTo('App\Ampere');
}
 public function category(){
    return $this->belongsTo('App\Category');
}
 public function voltage(){
    return $this->belongsTo('App\Voltage');
}

安培型号

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

类别模型

 public function brands(){
    return $this->hasMany('App\Brand');
}
public function products(){
    return $this->hasMany('App\Product');
}

电压模型

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

这是我的刀片视图

<tr>
  <td class="details">
    a href="#">Product name</a>
   <ul>
      <li><span>category</span></li>
      <li><span>Ampere</span></li>
      <li><span>Voltage</span></li>
    </ul>
   </td>
</tr>

这是我已经尝试过的

public function showAllProducts(){
    $products=Product::all();
    $products = Product::with('category','ampere','voltage')->get();

    foreach ($products as $product){
        echo $product->name." ";
        foreach ($product->ampere as $amp){
            echo $amp->name;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

在使用with加载多个关系时,必须传递一个数组:

$products = Product::with(['category','ampere','voltage'])->get();

然后,您可以直接使用$ product-> category-> name为例。

我注意到的另一件事是您在showAllProducts中使用了echo命令,这将无法正常工作。您需要执行什么才能调用view函数并使用with函数传递$ products。

public function showAllProducts()
{
  $products = Product::with(['category','ampere','voltage'])->get();
  return view("the_name_of_your_view_file")->with("products,$products);
}

现在,在您看来,多亏了刀片,我们可以在$products阵列上循环并显示每个产品以及其安培数,电压和类别。

@for ( $products as $product )
<tr>
  <td class="details">
    <a href="#">{{$product->name}}</a>
   <ul>
      <li><span>{{$product->category->name}}</span></li>
      <li><span>{{$product->ampere->name}}</span></li>
      <li><span>{{$product->voltage->name}}</span></li>
    </ul>
   </td>
</tr>
@endfor