2016-12-22 40 views
1

所以我有四个表:Laravel合并多行的多个列

  • 实验(表) - ID
  • feature_classes(列) - ID,EXPERIMENT_ID,标题
  • 实体(行) - ID ,EXPERIMENT_ID
  • 特征(细胞) - 编号,ENTITY_ID,feature_class_id,值

我需要从这些四个表构造的表。

我尝试这样做:

$experiment_id = $request->input('experiment_id'); 
    $feature_classes = FeatureClass::where('experiment_id', $experiment_id)->select('title', 'id')->get(); 

    $select = [ 
     'entities.id', 
     'entities.prediction', 
     'entities.result' 
    ]; 

    foreach ($feature_classes as $f) { 
     $select[] = $f->id . ".value AS " .$f->id; 
    } 

    $entities = DB::table('entities') 
     ->where('experiment_id', $experiment_id); 

    foreach ($feature_classes as $f) { 
     $entities = $entities->leftJoin('features AS ' . $f->id, function ($join) use ($f){ 
      $join->on($f->id . '.entity_id', '=', 'entities.id') 
       ->where($f->id . '.feature_class_id', $f->id); 
     }); 
    } 

    return $entities 
     ->select($select) 
     ->get(); 

但我的努力得到回报,出现此错误消息SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1 ? left join功能 ENTITY_ID =实体. ID FE”位于第1行(SQL:选择entitiesid,entitiesprediction,entitiesresult,1value as 1,2value as 2 from entities left join features as 1 on 1entity_id = entitiesid1feature_class_id 1 left left features as 2 on 2entity_id = entitiesid2feature_class_id 2其中experiment_id = 1)`

回答

0

我认为你不应该这样做。你应该通过在模型中添加多对多关系来解决这个问题,然后用雄辩来完成所有的工作。例如,在特征模型中:

public function Classes(){ 
    return $this->belongsToMany('App\Classes', 'feature_classes', 'feature_class_id', 'id'); 
} 

然后,类似的事情定义了由experiment_id链接的类和实体之间的关系。然后,你应该能够通过使用本地雄辩的功能来访问您所需要的数据,如

$entities = Features::where('experiment_id', $experiment_id)->Classes->Entities; 

return $entities 

点击此处了解详情:

https://laravel.com/docs/5.3/eloquent-relationships#many-to-many

+0

你说的“应用程序\班”是什么意思? –

+0

它与之相关的模型...其更详细的文档 –

+0

1.“Feature”与FeatureClass没有多对多的关系。 2.“特征”没有'experiment_id'列。 3.“FeatureClass”与“Entity”没有直接关系。 4.即使你的关系是正确的,我相信你的答案只会返回来自'实体'表的数据,没有来自'feature_classes'表的特征表数据和特征描述 –