Витягування кількох колонок з колекцій у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 10 грудня, 2024
Ви знаєте, як максимально ефективно витягти необхідні дані з колекцій у Laravel? Досліджте, як поєднання методів map та only дозволяє легко отримувати конкретні колонки, забезпечуючи чистий і зручний код для вашого проєкту

Laravel пропонує ефективний спосіб витягування значень з кількох колонок колекцій за допомогою методу map. На відміну від методу pluck(), який обмежений лише однією колонкою, комбінація map з only дозволяє більш гнучко працювати з даними.

# Як працює map з only

Поєднання методів map та only робить можливим ефективне витягування конкретних колонок з колекцій. Ось як можна реалізувати це:

<?php
 
namespace App\Http\Controllers;
 
use App\Models\Article;
use Illuminate\Http\Request;
 
class ArticleController extends Controller
{
    public function list()
    {
        return Article::take(20)->get()->map->only([
            'title',
            'content',
            'summary',
            'url_path'
        ]);
    }
}

Розглянемо практичний приклад для системи управління статтями:

<?php
 
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
 
return new class extends Migration
{
    public function up()
    {
        Schema::create('articles', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('content');
            $table->text('summary');
            $table->string('url_path');
            $table->timestamps();
        });
    }
};
 
// ArticleSeeder.php
use App\Models\Article;
 
class ArticleSeeder extends Seeder
{
    public function run()
    {
        Article::create([
            'title' => 'Getting Started',
            'content' => 'Повний текст статті...',
            'summary' => 'Короткий посібник для початківців',
            'url_path' => 'getting-started'
        ]);
 
        Article::create([
            'title' => 'Advanced Topics',
            'content' => 'Тематичний контент...',
            'summary' => 'Глибоке занурення у функції',
            'url_path' => 'advanced-topics'
        ]);
    }
}

Відповідь API міститиме лише вказані поля:

[
    {
        "title": "Getting Started",
        "content": "Повний текст статті...",
        "summary": "Короткий посібник для початківців",
        "url_path": "getting-started"
    },
    {
        "title": "Advanced Topics",
        "content": "Тематичний контент...",
        "summary": "Глибоке занурення у функції",
        "url_path": "advanced-topics"
    }
]

Комбінація map з only забезпечує чистий і ефективний спосіб витягування декількох колонок з колекцій Laravel, спрощуючи трансформацію даних і зберігаючи код читабельним та підтримуваним