我不应该使用原始查询,这会导致混乱!您能帮我改善它吗?
@foreach($attributes as $attribute)
{{ Form::bsText($attribute->name, $attribute->title, $customer->attributes()->find($attribute->id)->pivot->value ?? '') }}
@endforeach
属性模型:
public function customers()
{
return $this->belongsToMany(Customer::class);
}
客户模型:
public function attributes()
{
return $this->belongsToMany(Attribute::class)->withPivot('value');
}
控制器:
public function show(Customer $customer)
{
$attributes = Attribute::all();
return view('admin.customers.show', compact('customer', 'attributes'));
}
答案 0 :(得分:1)
第一个选项:
您可以将客户属性集合的索引重新整理为属性id,并通过id访问客户属性集合中的模型。
控制器:
$attributes = Attribute::all();
$customer = Customer::with('attribues')...
$customer->attributes = $customer->attributes->keyBy('id');
查看:
@foreach($attributes as $attribute)
{{ Form::bsText($attribute->name, $attribute->title, $customer->attributes[$attribute->id]->pivot->value ?? '') }}
@endforeach
第二个选项:
此选项基于与集合->attributes
(而不是关系->attributes()
)一起使用,以减少数据库查询的数量。
控制器:
$attributes = Attribute::all();
$customer = Customer::with('attribues')...
查看:
@foreach($attributes as $attribute)
{{ Form::bsText($attribute->name, $attribute->title, $customer->attributes->where('id', $attribute->id)->first()->pivot->value ?? '') }}
@endforeach
第一个选项应该比第二个更快。