Laravel-ը հայտնի PHP շրջանակ է, որն ապահովում է բազմաթիվ օգտակար հատկություններ մշակողներին: Այդ հատկանիշներից մեկը տվյալների հավաքածուների հետ աշխատելու ունակությունն է: Հավաքածուները Laravel-ում նման են զանգվածների, բայց դրանք ապահովում են լրացուցիչ ֆունկցիոնալություն և ավելի արտահայտիչ են: Laravel-ը նաև թույլ է տալիս ծրագրավորողներին ստեղծել անհատական ​​հավաքածուներ իրենց մոդելների համար:

Այս ձեռնարկում մենք կուսումնասիրենք, թե ինչպես ստեղծել հատուկ հավաքածուներ Laravel մոդելների համար: Մենք կանցնենք մաքսային հավաքածուի սահմանման գործընթացին, ինչպես օգտագործել այն ձեր կոդում և որոշ օրինակներ, թե ինչպես օգտագործել հատուկ հավաքածուները ձեր հավելվածում:

Պատվերով հավաքածուի սահմանում

Հատուկ հավաքածուն դաս է, որն ընդլայնում է Illuminate\Database\Eloquent\Collection դասը: Այս դասը տալիս է տվյալների հավաքածուների հետ աշխատելու շատ գործառույթներ, ներառյալ տվյալների զտման, տեսակավորման և մանիպուլյացիայի մեթոդները:

Մոդելի համար հատուկ հավաքածու սահմանելու համար դուք պետք է ստեղծեք նոր դաս, որն ընդլայնում է Illuminate\Database\Eloquent\Collection դասը: Ահա User մոդելի համար հատուկ հավաքածուի օրինակ.

namespace App\Collections;

use Illuminate\Database\Eloquent\Collection;

class UserCollection extends Collection
{
    // custom methods can be defined here
}

Այս օրինակում մենք ստեղծել ենք նոր դաս, որը կոչվում է UserCollection, որն ընդլայնում է Illuminate\Database\Eloquent\Collection դասը: Այս նոր դասը կարող է օգտագործվել User օբյեկտների հավաքածուների հետ աշխատելու հատուկ մեթոդներ սահմանելու համար:

Օգտագործելով հատուկ հավաքածու ձեր ծածկագրում

Ձեր մոդելի համար հատուկ հավաքածու սահմանելուց հետո կարող եք այն օգտագործել ձեր կոդում՝ զանգահարելով ձեր մոդելի setCollection մեթոդը: Ահա մի օրինակ, թե ինչպես օգտագործել UserCollection դասը, որը մենք սահմանել ենք ավելի վաղ.

use App\Models\User;
use App\Collections\UserCollection;

$users = User::all();
$collection = new UserCollection($users);
$collection->customMethod(); // call custom method defined in UserCollection class

Այս օրինակում մենք վերցրել ենք բոլոր օգտվողներին տվյալների բազայից և ստեղծել UserCollection դասի նոր օրինակ՝ անցնելով $users զանգվածում որպես արգումենտ: Այնուհետև մենք կարող ենք զանգահարել ցանկացած հատուկ մեթոդ, որը մենք սահմանել ենք UserCollection դասում:

Պատվերով հավաքածուների օգտագործման օրինակներ

Ահա մի քանի օրինակներ, թե ինչպես կարող եք օգտագործել հատուկ հավաքածուներ ձեր հավելվածում.

Օրինակ 1. Օգտագործողների զտում ըստ տարիքի

Ենթադրենք, դուք ունեք User մոդել՝ age հատկանիշով: Դուք կարող եք սահմանել հատուկ մեթոդ ձեր UserCollection դասում, որը զտում է օգտվողներին ըստ տարիքի.

class UserCollection extends Collection
{
    public function filterByAge($age)
    {
        return $this->filter(function ($user) use ($age) {
            return $user->age == $age;
        });
    }
}

Այնուհետև կարող եք օգտագործել այս մաքսային մեթոդը ձեր կոդի մեջ այսպես.

$users = User::all();
$collection = new UserCollection($users);
$filtered = $collection->filterByAge(30);

Սա կվերադարձնի նոր հավաքածու, որը պարունակում է միայն 30 տարեկան օգտվողներին:

Օրինակ 2. Օգտագործողների տեսակավորում ըստ անունների

Ենթադրենք, դուք ունեք User մոդել՝ name հատկանիշով: Դուք կարող եք սահմանել հատուկ մեթոդ ձեր UserCollection դասում, որը տեսակավորում է օգտվողներին ըստ անունների՝

class UserCollection extends Collection
{
    public function sortByName()
    {
        return $this->sortBy('name');
    }
}

Այնուհետև կարող եք օգտագործել այս մաքսային մեթոդը ձեր կոդի մեջ այսպես.

$users = User::all();
$collection = new UserCollection($users);
$sorted = $collection->sortByName();

Սա կվերադարձնի նոր հավաքածու, որը պարունակում է օգտվողներին տեսակավորված ըստ անունների:

Օրինակ 3. Օգտագործողների խմբավորում ըստ

Ենթադրենք, դուք ունեք User մոդել՝ city հատկանիշով: Դուք կարող եք սահմանել հատուկ մեթոդ ձեր UserCollection դասում, որը խմբավորում է օգտվողներին ըստ քաղաքների.

class UserCollection extends Collection
{
    public function groupByCity()
    {
        return $this->groupBy('city');
    }
}

Այնուհետև կարող եք օգտագործել այս մաքսային մեթոդը ձեր կոդի մեջ այսպես.

$users = User::all();
$collection = new UserCollection($users);
$grouped = $collection->groupByCity();

Սա կվերադարձնի նոր հավաքածու, որը խմբավորում է օգտատերերին ըստ իրենց քաղաքի:

Օրինակ 4. Օգտագործողի հատկանիշների քարտեզագրում

Ենթադրենք, դուք ունեք User մոդել՝ name և email հատկանիշով: Դուք կարող եք սահմանել հատուկ մեթոդ ձեր UserCollection դասում, որը օգտատերերին քարտեզագրում է զանգվածի մեջ միայն նրանց name և email հատկանիշներով.

class UserCollection extends Collection
{
    public function mapToNameAndEmail()
    {
        return $this->map(function ($user) {
            return [
                'name' => $user->name,
                'email' => $user->email,
            ];
        });
    }
}

Այնուհետև կարող եք օգտագործել այս մաքսային մեթոդը ձեր կոդի մեջ այսպես.

$users = User::all();
$collection = new UserCollection($users);
$mapped = $collection->mapToNameAndEmail();

Ենթադրենք, դուք ունեք User մոդել՝ city հատկանիշով: Դուք կարող եք սահմանել հատուկ մեթոդ ձեր UserCollection դասում, որը խմբավորում է օգտվողներին ըստ քաղաքների.

class UserCollection extends Collection
{
    public function groupByCity()
    {
        return $this->groupBy('city');
    }
}

Այնուհետև կարող եք օգտագործել այս մաքսային մեթոդը ձեր կոդի մեջ այսպես.

$users = User::all();
$collection = new UserCollection($users);
$grouped = $collection->groupByCity();

Սա կվերադարձնի նոր հավաքածու, որը խմբավորում է օգտատերերին ըստ իրենց քաղաքի:

Օրինակ 4. Օգտագործողի հատկանիշների քարտեզագրում

Ենթադրենք, դուք ունեք User մոդել՝ name և email հատկանիշով: Դուք կարող եք սահմանել հատուկ մեթոդ ձեր UserCollection դասում, որը օգտատերերին քարտեզագրում է զանգվածի մեջ միայն նրանց name և email ատրիբուտներով.

class UserCollection extends Collection
{
    public function mapToNameAndEmail()
    {
        return $this->map(function ($user) {
            return [
                'name' => $user->name,
                'email' => $user->email,
            ];
        });
    }
}

Այնուհետև կարող եք օգտագործել այս մաքսային մեթոդը ձեր կոդի մեջ այսպես.

$users = User::all();
$collection = new UserCollection($users);
$mapped = $collection->mapToNameAndEmail();

Սա կվերադարձնի նոր հավաքածու, որը պարունակում է զանգված՝ յուրաքանչյուր օգտագործողի միայն name և email հատկանիշներով:

Եզրակացություն

Այս ձեռնարկում մենք ուսումնասիրել ենք, թե ինչպես ստեղծել հատուկ հավաքածուներ Laravel մոդելների համար: Մենք անցել ենք հատուկ հավաքածու սահմանելու գործընթաց, ինչպես օգտագործել այն ձեր կոդում և տրամադրել ենք որոշ օրինակներ, թե ինչպես օգտագործել հատուկ հավաքածուները ձեր հավելվածում:

Պատվերով հավաքածուները կարող են հզոր գործիք լինել ձեր Laravel հավելվածում՝ ապահովելով լրացուցիչ ֆունկցիոնալություն և արտահայտիչություն ձեր կոդը: Այս ձեռնարկում ներկայացված օրինակներով և հասկացություններով դուք պետք է լավ լինեք ձեր սեփական Laravel մոդելների համար անհատական ​​հավաքածուներ ստեղծելու ճանապարհին: