如何将多个查询结果和迭代结果存储在一个数组中

时间:2019-11-13 11:56:49

标签: json laravel rest api response

我正在创建一个API。在此,我想向买家显示信息,他们的文件/图像的网址,并计入响应。我有3个表Buyers(PK:Buyers_id),filedocs(FK:Buyers_id),give_credit_transaction_master(FK:Buyers_id)。在这些表中,公共列是Buyer_id。

代码


public function index()
   {
       $filedocsObj = FileDoc::with(['relBuyers'])->where('is_active','1')->get();

//return $filedocsCount;

       $info = [];
       // $profile_urls=[];
       // $aadhar_urls=[];
       // $pan_urls=[];
       // $transaction_count=[];
     //  $info = array();
       for($i = 0; $i < count($filedocsObj); $i++){


          $buyer = FileDoc::Join('buyers', 'file_docs.buyers_id', '=', 'buyers.buyers_id')
                   ->where('file_docs.buyers_id',$filedocsObj[$i]->buyers_id)
                      ->select(
                 'buyers.buyers_id',
                 'buyers.buyers_name',
                 'buyers.buyers_address',
                 'buyers.buyers_contact_number',
                 'buyers.buyers_aadhar_number',
                 'buyers.buyers_pan_number',
                 'file_docs.buyers_profile_image',
                 'file_docs.buyers_aadhar_file',
                 'file_docs.buyers_pan_file',
             )    
             ->first();
           //  $info = $buyer->toArray();
             array_push($info, [
               'info' => $buyer
              ]);

          // $info[] = $buyer;
           $existProfile = Storage::disk('local')->exists('public/uploads/profile_images/'.$filedocsObj[$i]->buyers_profile_image);

       if (isset($filedocsObj[$i]->buyers_profile_image) && $existProfile) {
          // $profile_urls[$i] = Storage::disk('public')->url('/uploads/profile_images/'.$filedocsObj[$i]->buyers_profile_image);
           array_push($info, [
                       'profile_url' => Storage::disk('public')->url('/uploads/profile_images/'.$filedocsObj[$i]->buyers_profile_image)
                      ]);
           //$info[] = Storage::disk('public')->url('/uploads/profile_images/'.$filedocsObj[$i]->buyers_profile_image);        
       }
       else
       {
         // $profile_urls[$i]="";
           array_push($info, [
                      'profile_url' => ''
                      ]);
          // $info[] = "";
       }

       $existAadhar = Storage::disk('local')->exists('public/uploads/aadhar_files/'.$filedocsObj[$i]->buyers_aadhar_file);
       if (isset($filedocsObj[$i]->buyers_aadhar_file) && $existAadhar) {
           //$aadhar_urls[$i] = Storage::disk('public')->url('/uploads/aadhar_files/'.$filedocsObj[$i]->buyers_aadhar_file);
           array_push($info, [
                      'aadhar_url' => Storage::disk('public')->url('/uploads/aadhar_files/'.$filedocsObj[$i]->buyers_aadhar_file)
                      ]);
         // $info[] =  Storage::disk('public')->url('/uploads/aadhar_files/'.$filedocsObj[$i]->buyers_aadhar_file);        
       }

       $existPan = Storage::disk('local')->exists('public/uploads/pan_files/'.$filedocsObj[$i]->buyers_pan_file);
       if (isset($filedocsObj[$i]->buyers_pan_file) && $existPan) {
           //$pan_urls[$i] = Storage::disk('public')->url('/uploads/pan_files/'.$filedocsObj[$i]->buyers_pan_file);
           array_push($info, [
                      'pan_url' => Storage::disk('public')->url('/uploads/pan_files/'.$filedocsObj[$i]->buyers_pan_file)
                      ]);
          //$info[] = Storage::disk('public')->url('/uploads/pan_files/'.$filedocsObj[$i]->buyers_pan_file);        
       }

       $buyerTransactions = GiveCreditTransactionMaster::where('buyers_id',$filedocsObj[$i]->buyers_id)->get();
       array_push($info, [
        'transaction_count' => count($buyerTransactions)   
      ]);
  // $transaction_count[$i] = count($buyerTransactions);        
  // $resultSet = array_merge($info,$profile_urls,$aadhar_urls,$pan_urls,$transaction_count);


       }

       return $this->sendResponse($info, 'Buyers retrieved successfully.');

             // return $this->sendResponse($resultSet, 'Buyers retrieved successfully.');

      // return $this->sendResponse(array("Info" => $filedocs->toArray(),"profile_path" => $profile_urls, "aadhar_urls" => $aadhar_urls, "pan_urls" => $pan_urls, "transactionCountArray" => $transactionCountArray), 'Buyers retrieved successfully.');

   }

在上面的代码中,我采用了一个数组info,其中要推送查询结果buyer,迭代结果profile_url, aadhar_url, pan_url,而另一个查询结果计数transaction_count。然后返回info数组作为响应。

MY API响应:

{
    "success": true,
    "data": [
        {
            "info": {
                "buyers_id": 2,
                "buyers_name": "uuu",
                "buyers_address": "dfgfgf",
                "buyers_contact_number": "8986665576",
                "buyers_aadhar_number": "654654654545",
                "buyers_pan_number": "tytyr43242",
                "buyers_profile_image": "2_B_profile_lady_profile.png",
                "buyers_aadhar_file": "2_B_aadhar_aadhar_card_image.png",
                "buyers_pan_file": "2_B_pan_pan_image.jpg"
            }
        },
        {
            "profile_url": "http://localhost/storage/uploads/profile_images/2_B_profile_lady_profile.png"
        },
        {
            "aadhar_url": "http://localhost/storage/uploads/aadhar_files/2_B_aadhar_aadhar_card_image.png"
        },
        {
            "pan_url": "http://localhost/storage/uploads/pan_files/2_B_pan_pan_image.jpg"
        },
        {
            "transaction_count": 2
        },
        {
            "info": {
                "buyers_id": 28,
                "buyers_name": "lili",
                "buyers_address": "hjkhkdfgf",
                "buyers_contact_number": "7856564656",
                "buyers_aadhar_number": "343435353545",
                "buyers_pan_number": "trtre34343",
                "buyers_profile_image": "28_B_profile_test_profile.png",
                "buyers_aadhar_file": "28_B_aadhar_test_aadhar.jpg",
                "buyers_pan_file": "28_B_pan_test_pan.jpg"
            }
        },
        {
            "profile_url": "http://localhost/storage/uploads/profile_images/28_B_profile_test_profile.png"
        },
        {
            "aadhar_url": "http://localhost/storage/uploads/aadhar_files/28_B_aadhar_test_aadhar.jpg"
        },
        {
            "pan_url": "http://localhost/storage/uploads/pan_files/28_B_pan_test_pan.jpg"
        },
        {
            "transaction_count": 0
        }
    ],
    "message": "Buyers retrieved successfully."
}

但是在以上响应中,我得到的是info而不是profile_url, aadhar_url, pan_url, transaction_count的特定买方。另外profile_url, aadhar_url, pan_url, transaction_count,这是分开的。

我希望一个购买者的所有参数(info,profile_url, aadhar_url, pan_url, transaction_count)都应包含在一个{}中。我如何得到这种回应?

我使用array_push,array_merge等做了很多尝试,但是没有得到所需的响应。

请帮助。预先感谢。

2 个答案:

答案 0 :(得分:0)

在PHP上,以下解决方案可能有效。
json_encode(array_merge(json_decode($a, true),json_decode($b, true)))
尝试让我知道。
当您使用array_merge时,请像上面那样尝试json_decode

答案 1 :(得分:0)

这将帮助您获得所需的响应。我已经履行了你的职责。尝试一下,让我知道它是否对您有帮助

public
function index()
{
    $filedocsObj = FileDoc::with(['relBuyers'])->where('is_active', '1')->get();

//return $filedocsCount;

    $info = [];
    // $profile_urls=[];
    // $aadhar_urls=[];
    // $pan_urls=[];
    // $transaction_count=[];
    //  $info = array();

    foreach ($filedocsObj as $index => $filedocsObjInfo) {
        $buyer = FileDoc::Join('buyers', 'file_docs.buyers_id', '=', 'buyers.buyers_id')
            ->where('file_docs.buyers_id', $filedocsObjInfo->buyers_id)
            ->select(
                'buyers.buyers_id',
                'buyers.buyers_name',
                'buyers.buyers_address',
                'buyers.buyers_contact_number',
                'buyers.buyers_aadhar_number',
                'buyers.buyers_pan_number',
                'file_docs.buyers_profile_image',
                'file_docs.buyers_aadhar_file',
                'file_docs.buyers_pan_file',
             )
            ->first();
        //  $info = $buyer->toArray();

        $info[$index]['info'] = $buyer;


        // $info[] = $buyer;
        $existProfile = Storage::disk('local')->exists('public/uploads/profile_images/' . $filedocsObjInfo->buyers_profile_image);

        if (isset($filedocsObjInfo->buyers_profile_image) && $existProfile) {
            $info[$index]['profile_url'] = Storage::disk('public')->url('/uploads/profile_images/' . $filedocsObjInfo->buyers_profile_image);
        } else {
            $info[$index]['profile_url'] = '';

        }

        $existAadhar = Storage::disk('local')->exists('public/uploads/aadhar_files/' . $filedocsObjInfo->buyers_aadhar_file);
        if (isset($filedocsObjInfo->buyers_aadhar_file) && $existAadhar) {

            $info[$index]['aadhar_url'] = Storage::disk('public')->url('/uploads/aadhar_files/' . $filedocsObjInfo->buyers_aadhar_file);
        }

        $existPan = Storage::disk('local')->exists('public/uploads/pan_files/' . $filedocsObjInfo->buyers_pan_file);
        if (isset($filedocsObjInfo->buyers_pan_file) && $existPan) {

            $info[$index]['pan_url'] = Storage::disk('public')->url('/uploads/pan_files/' . $filedocsObjInfo->buyers_pan_file);
        }

        $buyerTransactions = GiveCreditTransactionMaster::where('buyers_id', $filedocsObjInfo->buyers_id)->get();

        $info[$index]['transaction_count'] = count($buyerTransactions);

        // $transaction_count[$i] = count($buyerTransactions);
        // $resultSet = array_merge($info,$profile_urls,$aadhar_urls,$pan_urls,$transaction_count);


    }


    return $this->sendResponse($info, 'Buyers retrieved successfully.');

    // return $this->sendResponse($resultSet, 'Buyers retrieved successfully.');

    // return $this->sendResponse(array("Info" => $filedocs->toArray(),"profile_path" => $profile_urls, "aadhar_urls" => $aadhar_urls, "pan_urls" => $pan_urls, "transactionCountArray" => $transactionCountArray), 'Buyers retrieved successfully.');

}