Laravel 5 ใช้แบบสอบถามดิบรับผลลัพธ์ไปยังอาร์เรย์

ฉันมีคำถามจากฐานข้อมูลของฉันซึ่งฉันต้องการสร้างผลลัพธ์เป็นอาร์เรย์ ฉันใช้ 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" 
        }
    }

ฉันจะทำสิ่งนี้ได้อย่างไร? โปรดช่วยฉันสร้างด้วยแบบสอบถามที่ถูกต้อง ฉันต้องการสร้างผลิตภัณฑ์เป็นอาร์เรย์ย่อย

นี่คือโครงสร้างตารางของฉัน:

ตารางการจัดส่งสินค้า:

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

การจัดส่งสินค้า_ผลิตภัณฑ์:

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

สินค้า_ตาราง:

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

person Jc John    schedule 04.10.2017    source แหล่งที่มา
comment
คุณต้องการมากกว่าหนึ่งแบบสอบถามสำหรับสิ่งนั้น   -  person Gaurav Gupta    schedule 04.10.2017
comment
@ GauravGupta ขอบคุณสำหรับการตอบกลับของคุณครับ คุณช่วยให้ลิงค์เป็นตัวอย่างในการทำเช่นนั้นได้ไหม?   -  person Jc John    schedule 04.10.2017
comment
ต้องการโครงสร้างตารางของคุณเพื่อสิ่งนั้น   -  person Gaurav Gupta    schedule 04.10.2017
comment
@GauravGupta โอเคฉันจะโพสต์ตารางโครงสร้างสรุปด้วย   -  person Jc John    schedule 04.10.2017
comment
@JcJohn ลองเพิ่ม toArray() ต่อท้ายหลัง ->get()   -  person Ketan Solanki    schedule 04.10.2017
comment
@KetanSolanki มันให้ผลลัพธ์ข้างต้นแก่ฉัน ไม่ใช่ผลลัพธ์ที่ฉันต้องการบรรลุ   -  person Jc John    schedule 04.10.2017


คำตอบ (3)


คุณสามารถใช้ 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();
 }

นี่คือการตอบกลับ ลิงก์ หวังว่ามันจะช่วยคุณได้

person Gaurav Gupta    schedule 04.10.2017
comment
สวัสดีคุณช่วยฉันหน่อยได้ไหม? ฉันได้รับข้อผิดพลาด ข้อผิดพลาดในการแยกวิเคราะห์: ข้อผิดพลาดทางไวยากรณ์ '(' ที่ไม่คาดคิด ต้องการตัวระบุ (T_STRING) หรือตัวแปร (T_VARIABLE) หรือ '{' หรือ '$' - person Jc John; 04.10.2017
comment
นี่คือโค้ด:$shippings = DB::table('shipping_table') -›select('*') -›where(['shipping_table.shipping_status' =› $pending]) -›get(); foreach ($การจัดส่งเป็น $key =› $value) { $shippings[$key]-›products=DB::table('shipping_products')-›('products.featured_img','products.product_name', 'products. price','shipping_products.quantity') -›join('products', 'shipping_products.product_id', '=', 'products.product_id') -›where(['shipping_products.shipping_id', '=', $key ]) ->รับ(); } dd($ค่าจัดส่ง); - person Jc John; 04.10.2017
comment
คุณลืมเข้าร่วมหนึ่งรายการใน foreach loop ตรวจสอบใกล้กับสิ่งนี้ -›‌​('products.featured_‌​img','products.produ‌​ct_name', 'products.price','shi - person Gaurav Gupta; 04.10.2017
comment
ยินดีให้ความช่วยเหลือทุกเมื่อ :) - person Gaurav Gupta; 04.10.2017
comment
คุณช่วยฉันเพิ่ม->paginate(8) ได้ไหม - person Jc John; 04.10.2017
comment
$จำกัด = 10; $offset = ($data['page'] - 1) * $limit; และใส่สิ่งนี้ลงในแบบสอบถาม -›offset($offset) -›limit($limit) - person Gaurav Gupta; 04.10.2017
comment
ให้เราสนทนาต่อในการแชท - person Gaurav Gupta; 04.10.2017

คำตอบที่คุณทำไม่ได้ใน 1 แบบสอบถาม คุณสามารถทำได้ในสองแบบสอบถาม แต่คำตอบที่ดีที่สุดสำหรับคุณคือเริ่มใช้ Eloqent จากนั้นมันก็ง่ายมาก

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

mySQL ส่งคืนตารางเดียวในแบบสอบถามเดียวเสมอ คุณไม่สามารถสร้างวัตถุที่ซับซ้อนในแบบสอบถามเดียวได้

person Nevo    schedule 04.10.2017
comment
ฉันไม่ได้ใช้ฝีปากนะท่าน โปรดตอบฉันด้วยคำถามของฉัน - person Jc John; 04.10.2017

คุณสามารถใช้วิธีนี้:

   $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();
person Moeen Basra    schedule 04.10.2017
comment
การเรียกไปยังวิธีที่ไม่ได้กำหนด Illuminate\Database\Query\Builder::lists() - person Jc John; 04.10.2017
comment
ขอบคุณสำหรับการตอบกลับที่รวดเร็วของคุณครับ ฉันจะลองทันที - person Jc John; 04.10.2017
comment
ไม่มีอาร์กิวเมนต์ 1 สำหรับ Illuminate\Database\Query\Builder::pluck() - person Jc John; 04.10.2017
comment
ฉันเพิ่งอ่านเอกสารหากคุณต้องการให้โมเดลผู้ใช้ทั้งหมดประกอบในรูปแบบอาเรย์ คุณสามารถใช้ ->get()->all() ในขณะที่ถ้าคุณต้องการรับเฉพาะแอตทริบิวต์ที่เลือก คุณก็สามารถทำได้ด้วยวิธีนี้ ->pluck($attributes)->all() วิธีการ pluck ใช้สตริงที่คั่นด้วยเครื่องหมายจุลภาค - person Moeen Basra; 04.10.2017
comment
ขอโทษที่จะพูด!. มันไม่ได้แก้ปัญหาคำถามของฉัน เมื่อฉันลองใช้ มันให้ผลลัพธ์แบบเดียวกับที่ฉันโพสต์ที่ด้านบน ไม่ใช่ข้อความค้นหาที่ฉันต้องการบรรลุที่ด้านล่างของโพสต์ โปรดตรวจสอบโพสต์ของฉัน - person Jc John; 04.10.2017
comment
คุณต้องการคอลเลกชันสำหรับตารางฐานและอาร์เรย์สำหรับความสัมพันธ์หรือไม่? - person Moeen Basra; 04.10.2017
comment
คำตอบที่ฉันโพสต์จะให้ทั้งหมดในรูปแบบอาเรย์ที่ฉันทดสอบด้วยตัวเอง - person Moeen Basra; 04.10.2017
comment
ให้เราสนทนาต่อในการแชท - person Moeen Basra; 04.10.2017