通过将查询结果放入foreach中的另一个查询,从Laravel获取结果

时间:2018-05-16 00:53:18

标签: php laravel eloquent

我希望通过将查询结果放入foreach中的另一个查询中来获取Laravel的结果。

$first = DB::connection('store')
->table('entire_store')
->select('name', 'code', 'category', 'direct')
->where('open', 'Y')
->get();

第一个查询获取点的信息并将它们处理成数组。

将分支机构的信息与员工表中的工作区匹配。

我想将员工的工作场所信息保存在一起。

$temp = array();    
$i =0;    
foreach($first as $key => $item){

    $temp[$i]['name'] = $item->name;
    $temp[$i]['code'] = $item->code;

    $temp[$i]['category'] = $item->category;
    $temp[$i]['direct'] = $item→direct;

    $second = DB::connection('store')
     ->table('entire_employer')
     ->SELECT('mgr_no','mgr_id', 'status')
     ->where('store',$item->code)->get();
    //I tried.
    foreach($second as $key2 => $item2){
        $temp[$i]['mgr_id'] = $item2->mgr_id;
    }
    $i++;

}

我想将此查询中的值存储在temp_array中。

如果我尝试保存第二个查询的值并打印temp_array()的值,则会出错。

我还需要做些什么来检查temp_array()吗?

1 个答案:

答案 0 :(得分:0)

您要做的是将entire_employer表格的 LEFT JOIN 添加到entire_store表格中。这将完全符合您在代码中尝试做的事情:将一个表的记录与另一个表的记录进行匹配; LEFT 联接会将这些记录锚定在主表(entire_store,在本例中)。

您可以在单个查询中执行此操作:

$data = DB::connection('store')
  ->table('entire_store')
  ->select(
      'entire_store.name', 
      'entire_store.code', 
      'entire_store.category', 
      'entire_store.direct', 
      'entire_employer.mgr_no', 
      'entire_employer.mgr_id', 
      'entire_employer.status'
  )
  ->leftJoin('entire_employer', 'entire_employer.store', '=', 'entire_store.id')
  ->where('entire_employer.open', 'Y')
  ->get();

您可以在此处详细了解联接:https://www.sitepoint.com/understanding-sql-joins-mysql-database/