Laravel查询获取相关数据

时间:2018-08-08 17:15:29

标签: php laravel

我有一个查询(如下),我在编辑页面上获得产品规格列表,到目前为止,它可以返回我的数据。问题是我无法获得父母的信息。

Query

$specs = DB::table('product_subspecification')
->where('product_id', '=', $product->id)
->join('subspecifications', 'subspecifications.id', '=', 'product_subspecification.subspecification_id')
->get();

Result

{#3106 ▼
  +"id": 8
  +"product_id": 15
  +"subspecification_id": 8
  +"title": "Xplorer 5500M"
  +"specification_id": 6
  +"status_id": 1
  +"created_at": "2018-08-06 12:42:40"
  +"updated_at": "2018-08-06 12:42:40"
}

问题

问题是Xplorer 5500M实际上是我的子规格(我将其保存为产品规格,在这种情况下,it has parentKeyboard,我需要返回该父项(键盘)名称。

所以以后在刀片中我会看到类似的东西

+------------+---------------+
|   Parent   | Specification |
+------------+---------------+
|  Keyboard  | Xplorer 5500M |
+------------+---------------+

Blade

@foreach($specs as $spacsdf)
  <tr>
    <td>Parent name here</td>
    <td>{{$spacsdf->title}}</td>
    <td>Del Button</td>
  </tr>
@endforeach
  

PS:我尝试加入规格表(是父母表名称)   但是这次我得到的只是Keyboard,而不是Xplorer 5500M

这是我尝试的第二个查询:

$specs = DB::table('product_subspecification')
 ->where('product_id', '=', $product->id)
 ->join('subspecifications', 'subspecifications.id', '=', 'product_subspecification.subspecification_id')
 ->join('specifications', 'specifications.id', '=', 'subspecifications.specification_id')
 ->get();

有什么主意吗?

1 个答案:

答案 0 :(得分:2)

如果不指定要为联合查询检索的字段,那么如果您具有同名的列,则可能会遇到一些不必要的行为。

我建议尝试使用“选择”方法指定所需的字段:

$specs = DB::table('product_subspecification')
 ->select('product_subspecification.id', 'specifications.title as parent', 'subspecifications.title as subspec')
 ->where('product_id', '=', $product->id)
 ->join('subspecifications', 'subspecifications.id', '=', 'product_subspecification.subspecification_id')
 ->join('specifications', 'specifications.id', '=', 'subspecifications.specification_id')
 ->get();

那么您可能会得到如下结果:

{#3106 ▼
  +"id": 8
  +"subspec": "Xplorer 5500M"
  +"parent": "Keyboard"
}