我有以下3个表:
这是我的表结构:
Tool -> has many -> parts. part -> has many->part_details.
Tool : id*, name; Parts : id*, name, tool_id; part_details: id, part_id, total;
问题:
使用laravel
模型,我如何获得具有 biggest total on parts_details
的一部分工具?
答案 0 :(得分:0)
//工具模型
public function parts(){
return $this->hasMany(Part::class);
}
//零件模型
public function part(){
return $this->belongsTo(Tool::class);
}
public function part_details(){
return $this->hasMany(PartDetail::class);
}
// PartDetail Model
public function part(){
return $this->belongsTo(Part::class);
}
现在查询工具模型
$tools = Tool::with('parts')->withCount('parts.part_details')->get();
$toolWithMaxCount = $tools->filter(function($tool) use ($tools){
return $tool->parts->max('par_details_count') === $tools->max('parts.part_details_count');
})->first();
您可以通过添加一些原始绑定来优化它来改善这一点。我想你明白了。
答案 1 :(得分:0)
使用 hasManyThrough 关系获取与工具相关的所有部件详细信息,然后您可以检查逐个记录并获得工具部件的最高总数。
//工具模型
public function partsdetails()
{
return $this->hasManyThrough('App\PartDetail', 'App\Part','tool_id','part_id');
}
在您的控制器中
$data = Tool::all();
$array = [];
if(isset($data) && !empty($data)) {
foreach ($data as $key => $value) {
$array[$value->id] = Tool::find($value->id)->partsdetails()->sum('total');
}
}
if(is_array($array) && !empty($array)) {
$maxs = array_keys($array, max($array));
print_r($maxs);
}
else{
echo "No Data Available";
}
答案 2 :(得分:0)
工具模型
public function parts() {
return $this->hasMany('App\Part');
}
零件模型
public function details() {
return $this->hasMany('App\PartDetail');
}
public function tool() {
return $this->belongsToMany('App\Tool');
}
详细模型
public function part() {
return $this->belongsToMany('App\Part');
}
控制器
$tools = Tool::with('parts', 'parts.details')
->find($id)
->max('parts.part_details');