Laravel Collections: first() และ last() ดึงตัวแรก-สุดท้าย

Featured Image

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 ได้เมื่อไม่พบข้อมูล

ลองนำไปใช้กับโปรเจกต์จริงของคุณดูนะครับ!

เกี่ยวกับผู้เขียน

ITTHIPAT

สวัสดีครับผม อิทธิพัทธ์ (เป้) ชอบหาเทคนิคต่างๆที่ทำให้ชีวิต Programmer ง่ายขึ้น ทั้ง Automate, Library ชอบทำ Blog และ Video ถ้ามีเวลานะ!

ขอบคุณทุกคนที่ติดตาม และอ่านบทความของผมครับ ผมหวังว่าความรู้ที่เขียนขึ้นในเว็บไซต์นี้จะช่วยทุกท่านได้ไม่มากก็น้อย 

Scroll to Top