显示 one-to-one 关系的最有效方法是什么 [Laravel]
What is the most effiecient way to display a one-to-one relationship [Laravel]
有两个 table 具有 one-to-one 关系:Products
和 Descriptions
。
控制器 returns blade 视图中的两个 table。
我使用 foreach 循环来显示产品 table。
@foreach($products as $product)
...
{{ $product->name }}
{{ $product->price }}
...
@endforeach
我也想显示每个产品的描述
@foreach($products as $product)
...
{{ $product->name }}
{{ $product->price }}
...
{{ $description}}
@endforeach
其中 description->product_id == $product->id
我考虑过在每个循环中使用嵌套的 foreach 循环或从 blade 文件中查询,但它似乎效率不高。
有没有更好的方法?
[注意:并非每个产品都有描述]
我认为您需要将产品模型中的关系添加为:
use Description; // this is your Description model
class Product {
...
public function productDescription(){
return $this->hasOne('Description','product_id','id');
// hasOne here because you want a one to one
}
...
}
当你想调用产品时:
$products = Products::with('productDescription')->get()->toArray();
现在在迭代产品时,从产品项中获取每个产品的描述:
$description = $product->productDescription;
编辑:对于上面的html,这里有一个例子:
@foreach($products as $product)
{{ $product->name }}
{{ $product->price }}
{{isset($product->productDescription->name) ? $product->productDescription->name : '' }}
<!-- name key is just an example here -->
@endforeach
我以前用 twig 工作,但你为什么不用类似的东西
@if(isset($descriptions[$product->id]))
{{ $descriptions[$product->id] }}
@endif
在 blade 你不能吗?
有两个 table 具有 one-to-one 关系:Products
和 Descriptions
。
控制器 returns blade 视图中的两个 table。
我使用 foreach 循环来显示产品 table。
@foreach($products as $product)
...
{{ $product->name }}
{{ $product->price }}
...
@endforeach
我也想显示每个产品的描述
@foreach($products as $product)
...
{{ $product->name }}
{{ $product->price }}
...
{{ $description}}
@endforeach
其中 description->product_id == $product->id
我考虑过在每个循环中使用嵌套的 foreach 循环或从 blade 文件中查询,但它似乎效率不高。
有没有更好的方法?
[注意:并非每个产品都有描述]
我认为您需要将产品模型中的关系添加为:
use Description; // this is your Description model
class Product {
...
public function productDescription(){
return $this->hasOne('Description','product_id','id');
// hasOne here because you want a one to one
}
...
}
当你想调用产品时:
$products = Products::with('productDescription')->get()->toArray();
现在在迭代产品时,从产品项中获取每个产品的描述:
$description = $product->productDescription;
编辑:对于上面的html,这里有一个例子:
@foreach($products as $product)
{{ $product->name }}
{{ $product->price }}
{{isset($product->productDescription->name) ? $product->productDescription->name : '' }}
<!-- name key is just an example here -->
@endforeach
我以前用 twig 工作,但你为什么不用类似的东西
@if(isset($descriptions[$product->id]))
{{ $descriptions[$product->id] }}
@endif
在 blade 你不能吗?