PHPackages                             akbarali/view-model - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. akbarali/view-model

ActiveLibrary

akbarali/view-model
===================

View Model PHP Laravel

2.1(1y ago)22371MITPHPPHP &gt;=8.0

Since Jan 31Pushed 1y ago1 watchersCompare

[ Source](https://github.com/akbarali1/view-model)[ Packagist](https://packagist.org/packages/akbarali/view-model)[ RSS](/packages/akbarali-view-model/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (9)Versions (14)Used By (0)

Dokumentatsiya endi yoziladi

```
composer require akbarali/view-model

```

Use Pagination
==============

[](#use-pagination)

1. Pagination

```
   public function paginate(int $page = 1, $limit = 25, ?iterable $filters = null): DataObjectCollection
    {
        $model = OrganizationModel::applyEloquentFilters($filters)->latest();
        $model->select('organizations.*');

        $totalCount = $model->count();
        $skip       = $limit * ($page - 1);
        $items      = $model->skip($skip)->take($limit)->get();
        $items->transform(fn(OrganizationModel $value) => OrganizationData::createFromEloquentModel($value));

        return new DataObjectCollection($items, $totalCount, $limit, $page);
    }
```

2. OrganizationData

```
class OrganizationData extends \Akbarali\DataObject\DataObjectBase
{
    public readonly ?int $id;
    public ?string      $name;
    public ?int         $inn;
    public ?int         $pinfl;
    public ?string      $description;
    public int          $is_type;    // 1 - Qora ro`yhatdagilar, 2 -  Oq ro`yhatdagilar
    public Carbon       $created_at; // Yaratilgan vaqti
}
```

3. Pagionation View model

```
    public function index(string $type, Request $request): View
    {
        $filters = collect();
        $filters->push(OrganizationTypeFilter::getFilter($type));
        $dataObjectPagination = $this->paginate((int)$request->input('page', 1), 20, $filters);

        return (new PaginationViewModel($dataObjectPagination, OrganizationViewModel::class))->toView('organization.index', compact('type'));
    }
```

4. OrganizationViewModel

```
class OrganizationViewModel extends \Akbarali\ViewModel\BaseViewModel
{
    public ?int     $id;
    public ?string  $name;
    public ?int     $inn;
    public ?int    $pinfl;
    public ?string $description;
    public int     $is_type;
    public ?string $created_at;
    public ?string $hDate;

    protected DataObjectBase|OrganizationData $_data;

    public function populate(): void
    {
        $this->hType = $this->getHType();
        $this->hDate = $this->_data->created_at->format('d.m.Y H:i');

    }

    public function getHType(): string
    {
        return match ($this->is_type) {
            1       => "Qora ro`yhatdagilar",
            2       => "Oq ro`yhatdagilar",
            default => "Noma`lum",
        };
    }

}
```

First View Model
================

[](#first-view-model)

1. Organization get database

```
public function getOrganization(int $id): OrganizationData
{
    /** @var OrganizationModel $item */
    $item = OrganizationModel::query()->find($id);
    if (!$item) {
        throw new OperationException("Organization not found");
    }
     return OrganizationData::createFromEloquentModel($item);
}
```

2. Find Organization

```
public function edit(string $type, int $id): View
{
    $orgData   = $this->getOrganization($id);
    $viewModel = new OrganizationViewModel($orgData);

     return $viewModel->toView('organization.store', compact('type'));
}
```

1.7 version add viewmodel create empty
======================================

[](#17-version-add-viewmodel-create-empty)

```
$viewModel = OrganizationViewModel::createEmpty();

return $viewModel->toView('organization.store');
```

1.8 version add `fromDataObject` method
=======================================

[](#18-version-add-fromdataobject-method)

```
$viewModel = OrganizationViewModel::fromDataObject($orgData);
```

1.9 version add `toCsv` method
==============================

[](#19-version-add-tocsv-method)

```
class PartnerData extends \Akbarali\DataObject\DataObjectBase
{
    public readonly int $id;
    public readonly int $agentId;
    public string       $fullName;
    public string       $phone;
    public ?string      $address;
    public ?string      $description;
    public Carbon       $createdAt;
}

class PartnerViewModel extends \Akbarali\ViewModel\BaseViewModel
{
    public ?int    $id;
    public ?string $fullName;
    public ?string $phone;
    public ?string $hPhone;
    public ?string $address;
    public ?string $description;
    public ?string $hDate;
    public ?string $agentName;

    protected DataObjectBase|PartnerData $_data;

    protected function populate(): void
    {
        $this->hDate     = $this->_data->createdAt->format('d.m.Y H:i');
        $this->agentName = $this->_data->agent->full_name ?? '';
        $phone           = (new Phone($this->_data->phone));
        $this->hPhone    = $phone->getFormatted();
    }

    protected static function csvData(): array
    {
        return [
            'dataObject' => PartnerData::class,
            'columns'    => [
                "ID",
                trans('all.full_name'),
                trans('all.phone'),
                trans('all.agent'),
                trans('all.address'),
                trans('all.description'),
                trans('all.created_at'),
                'Time UTC',
            ],
            'fields'     => [
                'id',
                'fullName',
                'hPhone',
                'agentName',
                'address',
                'description',
                'hDate',
                fn($item) => $this->_data->createdAt->format('Y-m-d H:i:s'),
            ],
        ];
    }
}

final class PotentialPartnerController extends Controller
{
    public function index(Request $request)
    {
        $filters = collect();
        $filters->push(DateFilter::getDateRangeFilter());
        $filters->push(AgentFilter::getFilterAgentId($request->user()));
        if ($request->get('filter') === 'export') {
          return PartnerViewModel::toCsv($this->getExportQueryPartner($filters), 'csvData');
        }
    }

    public function getExportQueryPartner($filters): Builder
    {
        $model = PartnerModel::applyEloquentFilters($filters)->latest();
        $model->select('partners.*');
        return $model;
    }
}
```

2.0 version
===========

[](#20-version)

`CollectionViewModel` and `PaginationViewModel` add function `setSnakeCase`

###  Health Score

32

—

LowBetter than 72% of packages

Maintenance40

Moderate activity, may be stable

Popularity15

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity54

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~30 days

Recently: every ~69 days

Total

12

Last Release

503d ago

Major Versions

1.9.0 → 2.02024-09-12

### Community

Maintainers

![](https://www.gravatar.com/avatar/b3228f32e213a2e306db99f2526c4ec31bac09c86e360db37bde696689f962a2?d=identicon)[akbarali](/maintainers/akbarali)

---

Top Contributors

[![akbarali1](https://avatars.githubusercontent.com/u/39323182?v=4)](https://github.com/akbarali1 "akbarali1 (29 commits)")

---

Tags

phplaravel

### Embed Badge

![Health badge](/badges/akbarali-view-model/health.svg)

```
[![Health](https://phpackages.com/badges/akbarali-view-model/health.svg)](https://phpackages.com/packages/akbarali-view-model)
```

###  Alternatives

[llm-agents/agents

LLM Agents PHP SDK - Autonomous Language Model Agents for PHP

16410.9k9](/packages/llm-agents-agents)[tehwave/laravel-achievements

Simple, elegant Achievements the Laravel way

7012.8k](/packages/tehwave-laravel-achievements)[wayofdev/laravel-symfony-serializer

📦 Laravel wrapper around Symfony Serializer.

2113.6k](/packages/wayofdev-laravel-symfony-serializer)[omalizadeh/laravel-multi-payment

A driver-based laravel package for online payments via multiple gateways

491.1k](/packages/omalizadeh-laravel-multi-payment)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
