view src/Models/BaseModel.php @ 7:e6132a1e8e24 default tip

Adding better support for test among other base changes.
author Luka Sitas <sitas.luka.97@gmail.com>
date Thu, 25 Sep 2025 19:58:32 -0400
parents b44434aaa767
children
line wrap: on
line source

<?php

namespace Wizard\Framework\Models;

use Illuminate\Database\Eloquent\Model;
use Wizard\Framework\Database\Builder;
use Wizard\Framework\Traits\Filterable;

class BaseModel extends Model
{
    use Filterable;

    protected static string $builder = Builder::class;

    protected $default_relations = [];

    public static function boot(): void
    {
        parent::boot();

        self::creating(function ($item) {
            if ($user_id = (\Auth::user()->id ?? null)) {
                $item->created_by = $user_id;
                $item->updated_by = $user_id;
            }
        });

        self::saving(function ($item) {
            if ($user_id = (\Auth::user()->id ?? null)) {
                $item->updated_by = $user_id;
            }
        });
    }

    protected static function load_auxilary_data()
    {
        $data = [];

        $instance = new static;

        foreach ($instance->default_relations as $relation) {
            $related_model = $instance->$relation()->getRelated();
            $related_table = $related_model->getTable();
            $data[$related_table] = $related_model->all()->pluck('name', 'id')->toArray();
        }

        return $data;
    }

    public static function load_index()
    {
        return static::load_auxilary_data();
    }

    public static function load_create()
    {
        return static::load_auxilary_data();
    }

    public static function load_edit()
    {
        return static::load_auxilary_data();
    }

    public static function named_joins()
    {
        return [];
    }

    /**
     * Retrieve a query builder instance with default relations loaded.
     *
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public static function data_query()
    {
        $query = static::query();

        $instance = new static;

        foreach ($instance->default_relations as $relation) {
            $query->with($relation);
        }

        return $query;
    }

    /**
     * Retrieve a query builder instance with default relations loaded.
     *
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public static function get_data(array $validated = [])
    {
        $query = static::data_query();

        $query->filter($validated);

        return $query->get();
    }
}