first() และ last() ใน Laravel Collections
บทนำ
เวลาเราทำงานกับข้อมูลใน Laravel บ่อยครั้งที่เราต้องการดึงข้อมูลแค่ตัวแรกหรือตัวสุดท้ายจาก Collection first() และ last() คือ methods ที่ช่วยให้การดึงข้อมูลเหล่านี้ทำได้ง่ายและรวดเร็ว
first() – ดึงข้อมูลตัวแรก
first() จะคืนค่าข้อมูลตัวแรกใน Collection
<?php
$users = collect([
['name' => 'Somchai', 'age' => 25],
['name' => 'Suda', 'age' => 30],
['name' => ' chaiya', 'age' => 28]
]);
$firstUser = $users->first();
echo $firstUser['name']; // Output: Somchai
?>
first() กับเงื่อนไข
เราสามารถส่ง callback เพื่อหาตัวแรกที่ตรงเงื่อนไข:
<?php
$users = collect([
['name' => 'Somchai', 'age' => 25],
['name' => 'Suda', 'age' => 30],
['name' => 'Chaiya', 'age' => 28],
['name' => 'Manee', 'age' => 35]
]);
$firstOver30 = $users->first(function ($user) {
return $user['age'] > 30;
});
echo $firstOver30['name']; // Output: Manee
?>
กรณีไม่มีข้อมูลตรงเงื่อนไข
ถ้าไม่มีข้อมูลตรงเงื่อนไข Laravel จะคืนค่า null แต่เรากำหนด default value ได้:
<?php
$users = collect([
['name' => 'Somchai', 'age' => 25]
]);
$firstOver30 = $users->first(function ($user) {
return $user['age'] > 30;
}, 'ไม่พบข้อมูล');
// หรือใช้ arrow function
$firstOver30 = $users->first(
fn ($user) => $user['age'] > 30,
'ไม่พบข้อมูล'
);
?>
last() – ดึงข้อมูลตัวสุดท้าย
last() จะคืนค่าข้อมูลตัวสุดท้ายใน Collection
<?php
$users = collect([
['name' => 'Somchai', 'age' => 25],
['name' => 'Suda', 'age' => 30],
['name' => 'Chaiya', 'age' => 28]
]);
$lastUser = $users->last();
echo $lastUser['name']; // Output: Chaiya
?>
last() กับเงื่อนไข
<?php
$products = collect([
['name' => 'iPhone', 'price' => 30000],
['name' => 'Samsung', 'price' => 25000],
['name' => 'Xiaomi', 'price' => 12000],
['name' => 'OPPO', 'price' => 15000]
]);
$lastExpensive = $products->last(function ($product) {
return $product['price'] > 20000;
});
echo $lastExpensive['name']; // Output: Samsung (ราคา 25000 บาท แต่ iPhone อยู่ก่อน)
?>
firstWhere() – หาตัวแรกตามเงื่อนไข (เทียบเคียง)
นอกจาก first() กับ callback แล้ว Laravel ยังมี firstWhere() ที่อ่านง่ายกว่า:
<?php
$products = collect([
['name' => 'iPhone', 'category' => 'Phone', 'price' => 30000],
['name' => 'Samsung', 'category' => 'Phone', 'price' => 25000],
['name' => 'MacBook', 'category' => 'Laptop', 'price' => 50000]
]);
// หาสินค้า category เป็น Phone ตัวแรก
$firstPhone = $products->firstWhere('category', 'Phone');
echo $firstPhone['name']; // Output: iPhone
?>
ตัวอย่างการใช้งานจริง
1. ดึง order ล่าสุดของลูกค้า
<?php
$latestOrder = Order::where('customer_id', $customerId)
->get()
->last();
echo $latestOrder->order_number;
?>
2. หาสินค้าขายดีที่สุด
<?php
$bestSeller = $products->last(function ($product) {
return $product['sales_count'] === $products->max('sales_count');
});
?>
3. ดึงรายการแรกจาก API response
<?php
$response = Http::get('https://api.example.com/users')->json();
$firstUser = collect($response)->first();
?>
สรุป
first() และ last() เป็น methods ที่ใช้บ่อยมากในการทำงานกับ Laravel Collections
- first() – ดึงข้อมูลตัวแรก หรือตัวแรกที่ตรงเงื่อนไข
- last() – ดึงข้อมูลตัวสุดท้าย หรือตัวสุดท้ายที่ตรงเงื่อนไข
- ทั้งคู่รองรับ callback function สำหรับเงื่อนไขที่ซับซ้อน
- สามารถกำหนด default value ได้เมื่อไม่พบข้อมูล
ลองนำไปใช้กับโปรเจกต์จริงของคุณดูนะครับ!