Pertanyaan saya sederhana: Bagaimana cara mendapatkan id produk dari pesanan perdagangan dengan kode Drupal? Saya punya sesuatu seperti ini saat ini:
$orders = commerce_order_load_multiple(array(), array('status' => 'pending'), TRUE);
foreach($orders as $order) {
foreach ($order->commerce_line_items['und'] as $line) {
$line_id = $line['line_item_id'];
// ... product id, where are you?
}
Semoga ada yang bisa menjawab pertanyaan ini :)
Jawaban:
Saya tidak ingat struktur persis bidang referensi produk perdagangan, tetapi Anda perlu melakukan sesuatu seperti ini.
Peringatan gaya kode ini tidak akan berfungsi pada banyak pesanan karena cache internal untuk entitas item baris akan menggunakan terlalu banyak memori. Ini akan menjadi masalah jika Anda memiliki ribuan pesanan.
sumber
field_get_items()
untuk mendapatkan item dari bidang, dan alih-alih lakukan itu. Jadiforeach ($order->commerce_line_items['und'] as $line) { ... }
menjadi$items = field_get_items('commerce_order', $order, 'commerce_line_items'); foreach ($items as $line) { ... }
, dll. Atau, gunakan entitas_metadata_wrapper, yang secara otomatis memperhitungkan bahasa.Menggunakan pembungkus metadata entitas, Anda juga bisa melakukan:
Bagian penting di sini adalah memeriksa jenis item baris, sehingga Anda tidak berakhir termasuk item pengiriman baris atau jenis item baris lainnya dalam daftar ID produk Anda. Selain itu, dengan pemberitahuan wrapper bahwa saya menggunakan nilai "mentah" dari bidang commerce_produk pada item baris. Ini karena "nilai" akan menjadi produk referensi yang dimuat penuh, sedangkan nilai "mentah" hanyalah ID produk.
sumber
Jika Anda tidak perlu memuat seluruh objek (item baris, pesanan, dan produk perdagangan) Anda dapat menjalankan kueri seperti ini:
sumber
JOIN {field_data_commerce_product} p ON (p.entity_id = li.line_item_id AND p.entity_type = 'commerce_line_item')