Laravel 5 使用原始查询获取结果到数组

Laravel 5 using raw query getting result to array

我有一个来自我的数据库的查询,我想将结果放入数组中,我正在使用 laravel 但我没有使用 Eloquent 因为我只是一个初学者。这是我的查询。

查询:

 $array = array();

        $shippings = DB::table('shipping_table')
        ->select('*')
        ->leftJoin('shipping_products', function ($join) use ($array) {
            $join->on('shipping_products.shipping_id','=','shipping_table.shipping_id');
        })
        ->leftJoin('products', function ($join) use ($array) {
            $join->on('products.product_id', '=', 'shipping_products.product_id');
        })->get();

        dd($shippings);

这里我的查询结果是这样的:

Collection {#296 ▼
  #items: array:2 [▼
    0 => {#297 ▼
      +"shipping_id": 56
      +"shipping_date": null
      +"total_amount": 95000
      +"shipping_receiver": "Robert"
      +"shipping_address": "test"
      +"mobile_number": "09992238185"
      +"user_id": 1
      +"shipping_status": 0
      +"paywith": "paypal"
      +"id": 9
      +"product_id": 1
      +"quantity": 15
      +"subcategory_id": 1
      +"featured_img": "sample image1.jpg"
      +"product_name": "Product 1"
      +"description": "Product 1 desc"
      +"price": 46000.0
      +"status": "published"
      +"created_at": "2017-10-04 05:29:59"
      +"updated_at": "2017-10-04 05:29:59"
    }
    1 => {#287 ▼
      +"shipping_id": 56
      +"shipping_date": null
      +"total_amount": 95000
      +"shipping_receiver": "Robert"
      +"shipping_address": "Test"
      +"mobile_number": "09992238185"
      +"user_id": 1
      +"shipping_status": 0
      +"paywith": "paypal"
      +"id": 10
      +"product_id": 2
      +"quantity": 10
      +"subcategory_id": 1
      +"featured_img": "DSC04477-e1490885078524-200x300.jpg"
      +"product_name": "Product 2"
      +"description": "Product 2 desc"
      +"price": 49000.0
      +"status": "published"
      +"created_at": "2017-10-04 05:58:55"
      +"updated_at": "2017-10-04 05:58:55"
    }
  ]
}

在我得到的结果中,我不满意,因为我想要这样的结果:

Collection {#296 ▼
  #items: array:1 [▼
    0 => {#297 ▼
      +"shipping_id": 56
      +"shipping_date": null
      +"total_amount": 95000
      +"shipping_receiver": "test"
      +"shipping_address": "tester"
      +"mobile_number": "09992238185"
      +"user_id": 1
      +"shipping_status": 0
      +"paywith": "paypal"
       #products: array:2 {
         0 => {
          +"product_id": 1
          +"quantity": 15
          +"subcategory_id": 1
          +"featured_img": "sample.jpg"
          +"product_name": "Product 1"
          +"description": "Product desc 1"
          +"price": 46000.0
          +"status": "published"
          +"created_at": "2017-10-04 05:29:59"
          +"updated_at": "2017-10-04 05:29:59" 
        }
        1 => {
          +"product_id": 2
          +"quantity": 10
          +"subcategory_id": 1
          +"featured_img": "DSC04477-e1490885078524-200x300.jpg"
          +"product_name": "Product 2"
          +"description": "Product Desc 2"
          +"price": 46000.0
          +"status": "published"
          +"created_at": "2017-10-04 05:29:59"
          +"updated_at": "2017-10-04 05:29:59" 
        }
    }

我怎样才能做到这一点?请帮助我构建正确的查询。我想把产品做成子数组

这是我的 table 结构:

运费table:

Ship_ID (INT AUTO INC)
AMOUNT (DOUBLE,2)
NAME (VARCHAR)
SHIP_DATE (DATE)
RECEIVER (VARCHAR)

Shipping_products:

ID (INT AUTO INC)
Ship_id (foreign key from shipping table)
Product_id

Products_table:

Product_id (Auto Inc)
name(varchar)
Qty(int)
Description (varchar)

你可以这样使用:

   $shippings = DB::table('shipping_table')
            ->select('*')
            ->leftJoin('shipping_products', function ($join) use ($array) {
                $join->on('shipping_products.shipping_id','=','shipping_table.shipping_id');
            })
            ->leftJoin('products', function ($join) use ($array) {
                $join->on('products.product_id', '=', 'shipping_products.product_id');
            })->get()->all();

您无法在 1 个查询中完成的答案。 您可以在两个查询中完成。 但对你来说最好的答案是开始使用 Eloqent 然后它就超级简单

$shipping = Shipping::with('productShipping')->get();

mySQL 总是 return 单个 table 在一个查询中你不能在一个查询中创建复杂的对象

对于这种类型的结果,您可以使用 foreach() 这是一些帮助代码

$package_data = DB::table('packages_type')->where('flag','0')->select('id','name')->get();
                foreach ($package_data as $key => $value) {
                $package_data[$key]->package_det =  DB::table('plans')->where('p_type_id',$value->id)
                                    ->leftJoin('packages_time', 'plans.p_time_id', '=', 'packages_time.id')
                                    ->select('plans.amount','packages_time.name as time_name')
                                    ->get();
 }

这是它的回应 link 希望对你有帮助