我有一个产品表,另外三个表(电压,安培,类别),现在产品表将这三个表与voltage,ampere,category hasMany Products
和Products 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;
}
}
}
答案 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