我尝试从由外键(brand_id)连接的两个表(brands和raw_materials)中获取数据。一个品牌可以有多种原材料。我希望它在一个页面上显示在其各自的品牌下。取而代之的是,我会单独显示结果。
使用Laravel 5.7和Eloquent。
My Tables
[brands]
id name
----------
1 Apple
2 Colgate
3 LintX
[raw_materials]
id name brand_id quantity
-----------------------------------------
1 50g pouch 1 200
2 10g laminate 3 320
3 75mm oil 1 500
4 Mint Rubber 3 400
5 Fire pouch 2 550
6 400 String 1 500
7 90g pouch 2 200
PageController
$brandData = DB::table('brands')
->join('raw_materials','raw_materials.brand_id','brands.id')
->select('brands.id as brand_id','brands.name as brand_name','raw_materials.name as raw_material','raw_materials.quantity')
->orderBy('brands.id')
->get();<br>
return view('rawmaterials.index', [
'brandData'=>$brandData,
]);
视图
@foreach ($brandData as $brand)
<p>Brand Name: {{$brand->brand_name}}</p>
<p>{{$brand->raw_material}} | Quantity: {{$brand->quantity}}</p>
<br>
@endforeach
预期结果:
品牌名称:苹果
50g邮袋|数量: 200
75毫米机油|数量: 500
400 String |数量: 500
品牌名称:高露洁
火袋|数量: 550
75毫米机油|数量: 500
400 String |数量: 500
next brand ..
实际结果:
品牌名称:苹果
50g邮袋|数量: 200
品牌名称:苹果
75毫米机油|数量: 500
品牌名称:苹果
400 String |数量: 500
品牌名称:高露洁
火袋|数量: 550
And so on..
发布于 2019-06-20 08:10:08
这将会起作用
$brandData = \DB::table('brands')->orderBy("brands.id")->get();
foreach ($brandData as $brand) {
$brand->raw_materials = \DB::table("raw_materials")->where("brand_id", $brand->id)->get();
}
return view('rawmaterials.index', [
'brandData'=>$brandData
]);
然后在您的视图中,您将像这样使用嵌套...
@foreach ($brandData as $brand)
<p>Brand Name: {{$brand->name}}</p>
@foreach($brand->raw_materials as $raw)
<p>{{$raw->name}} | Quantity: {{$raw->quantity}}</p>
@endforeach
<br>
@endforeach
这应该可以完成工作。
另一方面,如果您想使用Eloquent,则必须按如下方式设置品牌模型和RawMaterial模型中的关系,假设品牌和RawMaterial模型直接位于应用程序文件夹中
class Brand extends Model
{
public function raw_materials()
{
return $this->hasMany('App\RawMaterial');
}
}
class RawMaterial extends Model
{
public function brand()
{
return $this->belongsTo('App\Brand');
}
}
然后在您的控制器中,您只需执行以下操作...
$brandData = \App\Brand::with("raw_materials")->orderBy("id")->get();
不需要更改.blade文件中的刀片语法,因为应用了相同的foreach循环
发布于 2019-06-20 08:26:16
您可以先创建一个关系:
function raw_materials() {
return $this->hasMany(RawMaterial.class);
}
在控制器中,使用with()函数,如下所示:
$brandData = Brand::with('raw_materials')->all();
return view('rawmaterials.index', [
'brandData'=>$brandData
]);
然后在您的视图中,您可以获得raw_materials表数据:
@foreach($branData as $brand)
<h3>{{ $brand->name }}</h3>
@foreach($brand->raw_materials as $raw_material)
<div>{{ $raw_material->name }}</div>
<div>{{ $raw_material->quantity }}</div>
@endforeach
@endforeach
https://stackoverflow.com/questions/56676530
复制相似问题