Laravel пропонує ефективний спосіб витягування значень з кількох колонок колекцій за допомогою методу map. На відміну від методу pluck(), який обмежений лише однією колонкою, комбінація 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, спрощуючи трансформацію даних і зберігаючи код читабельним та підтримуваним