Skip to content

Instantly share code, notes, and snippets.

@philiplambok
Last active November 25, 2018 03:16
Show Gist options
  • Save philiplambok/90fd17f7f7655a0917bf17d023bcf37d to your computer and use it in GitHub Desktop.
Save philiplambok/90fd17f7f7655a0917bf17d023bcf37d to your computer and use it in GitHub Desktop.
Cara menyimpan nilai array dalam sebuah sessions.

Cara menyimpan nilai array dalam sebuah sessions.

Tulisan ini mencoba untuk membahas cara pembuatan fitur keranjang belanja pada sebuah aplikasi E-commerce.

Keranjang belanja dikenal sifatnya yang dinamis dan mungkin tidak cocok untuk disimpan di database. Walapun jika anda memiliki orang data science, mungkin saja lebih baik anda menyimpannya di database.

Namun tulisan ini hanya akan memperlihatkan pengimplementasian pada sessions saja.

Session sebenarnya adalah cookies yang dienkripsi. Cookies dikenal dengan sturktur data key-dan-values : key = value. Jika anda ingin menyimpan nilai array anda mungkin akan menemukan masalah.

Penyimpanan dan pengambilan nilai sesssions.

Di php anda bisa menggunakan ini

// Store nilai sessions 
sessions_start();
$_SESSIONS["user_id"] = 422;

// menghapus nilai sessions 
sessions_start();
sessions_unset("user_id"); 

PHP sebagai bahasa pemrograman yang memang dibuat untuk pemrograman web menyediakan global variable untuk sessions, sehingga anda bisa memamfaatkan.

Sebenernya cara tersebut bisa bekerja di framework apapun termasuk laravel, namun sayangnya pemrogram laravel tidak terlalu suka dengan kode tersebut, mereka lebih suka kode yang lebih bersih dan pastinya OOP. Maka, anda bisa menggunakan kode seperti dibawah ini :

// menyimpan nilai sessions di laravel. 
sessions(['user_id' => '422']); 

// menggambil nilai sessionnya 
$value = sessions('user_id');

// menghapusnya
sessions(['user_id' => null]); 

Lebih lanjut bisa lihat disini.

Menyimpan nilai array di sessions.

Setelah kita tau bagaimana menyimpan nilai string di sessions, sekarang kita memamfaatkan fitur tersebut untuk menyimpan nilai sessions.

Pada keranjang biasanya kita memiliki data yang sifatnya collection atau sebuah array, misalnya: [23,42,451]. Array tersebut berisi kumpulan id dari sebuah table products. Kita akan menyimpan data itu di dalam sessions.

Pertama silahkan ubah array tersebut ke dalam string.

// mengubah nilai array menjadi string, yang per-id-nya dipisah dengan koma.
$collection_ids = array(23,42,451); 
$collection_string = join(",", $collection_ids);  // => "23,42,451"

Nah collection string itulah yang akan kita simpan di dalam sessionnya.

sessions(['user_carts' => $collection_string]); 

Sekarang data cart sudah berhasil kita simpan, sekarang user mencoba ingin melihat kembali, produk2 apa saja yang sudah ada di keranjangnya. Sekarang kita akan menampilkan arraynya dari string yang akan kita simpan.

Untuk menampilkannya kita bisa melakukan method explode, seperti kode dibawah ini:

// ambil string dari session yang sudah disimpan. 
$user_carts = sessions("user_carts") // => "23,42,451"

// ubah string tadi menjadi array 
$user_carts_arr = explode(",", $collection_string);

echo $user_carts_arr;  // => [23,42,451]

Yay, anda telah berhasil mengambil nilai sessionnya menjadi array kembali, sekarang anda tinggal mencari produk2 yang memilki id yang ada di array $user_carts_arr.

// mengambil data produk2nya. 
$user_product_carts = Product::whereIn('id', $user_carts_arr)->get();

Sekarang anda sudah data2 produknya :)

Upps, saya ada kelewat, karena di session saya hanya menyimpan id-nya saja, bagaimana saya bisa memiliki id tersebut dari produk2 yang ada di database? Saya mencoba mengambil id yang dari model yang barusan kita buat.

$user_product_carts_ids = $user_proct_carts->pluck('id');  // [23,42,451]

Beberapa catatan juga sebelum mengakhiri tulisan ini. Mungkin anda akan bertanya bagaimana bisa melakukan update terhadap sessionsnya? update dilakukan dengan array seperti kode dibawah ini:

// menambah id baru ke dalam kumpulan ids. 
$user_cart_arr = array_push($user_cart_arr, 52);  // => [23,42,451,52]

// menghapus id tertentu pada array - weird :(
 $user_cart_arr = array_diff($user_cart_arr, array(42)) // => [23,451,52]

Sudah selesai :)

Terima kasih telah membaca, jika anda pertanyaan atau ada yang terlewat monggo untuk ditanyakeun.

Nanami, Touko
Ruby Engineer

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment