collect() ใน Laravel Collections
ต้องจัดการ array ข้อมูลแบบมืออาชีพ แต่ native PHP functions ยังไม่พอใช่ไหม? collect() เป็นจุดเริ่มต้นที่จะเปลี่ยน array ธรรมดาให้กลายเป็น Collection ที่ทรงพลังพร้อมเครื่องมือช่วยจัดการข้อมูลแบบ chainable และ expressive ในทันที
🔧 วิธีใช้งาน
พื้นฐาน
use Illuminate\Support\Collection;
// สร้างจาก array
$collection = collect([1, 2, 3, 4, 5]);
// Illuminate\Support\Collection {#1234
// all: [1, 2, 3, 4, 5],
// }
สร้างจากหลาย source
// จาก associative array
$collection = collect([
"name" => "Somchai",
"age" => 30,
"city" => "Bangkok"
]);
// จาก object
$user = (object) ["id" => 1, "name" => "Test"];
$collection = collect((array) $user);
// จาก string (ตัวอักษรแต่ละตัว)
$collection = collect("hello");
// ["h", "e", "l", "l", "o"]
Chain methods กันเลย!
$result = collect([5, 3, 1, 4, 2])
->sort()
->map(fn($n) => $n * 2)
->take(3)
->toArray();
// [2, 6, 8]
📌 ตัวอย่างใช้งานจริง
Example 1: จัดการ products ใน e-commerce
$products = collect([
["id" => 1, "name" => "iPhone 15", "price" => 35000, "stock" => 10],
["id" => 2, "name" => "Samsung S24", "price" => 32000, "stock" => 5],
["id" => 3, "name" => "Xiaomi 14", "price" => 22000, "stock" => 0],
]);
// หาสินค้าที่มี stock
$inStock = $products->filter(fn($p) => $p["stock"] > 0);
// คำนวณราคารวม
$totalValue = $products->sum(fn($p) => $p["price"] * $p["stock"]);
// 500,000 บาท
Example 2: จัดการ user data จาก API
$users = collect(json_decode($apiResponse, true))
->map(fn($user) => [
"id" => $user["id"],
"name" => $user["first_name"] . " " . $user["last_name"],
"email" => $user["email"]
])
->keyBy("id")
->only([1, 3, 5]); // เลือกเฉพาะ user id 1, 3, 5
Example 3: Pagination แบบ manual
$allItems = collect(range(1, 100)); // ข้อมูล 100 รายการ
$page = 2;
$perPage = 10;
$items = $allItems
->forPage($page, $perPage) // [11, 12, ..., 20]
->values(); // reset keys → [0=>11, 1=>12, ...]
📌 สรุป
collect()เป็น gateway เข้าสู่ Laravel Collections API- แปลง array/object/string → Collection object ในทันที
- เปิดใช้ methods พันธุ์ใหม่:
map(),filter(),sort(),reduce()ฯลฯ - รองรับ chaining → เขียน code สั้น อ่านง่าย
- เหมาะสำหรับ data processing, filtering, transforming
ถ้าต้องจัดการข้อมูลใน PHP → ใช้ collect() ดีกว่า native array เสมอ! 🚀