| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 | <?phpnamespace Modules\Develop\Models;use Catch\Base\CatchModel;use Catch\Enums\Status;use Exception;use Illuminate\Database\Eloquent\Model;use Illuminate\Support\Facades\DB;use Illuminate\Support\Facades\Schema as SchemaFacade;use Modules\Develop\Support\Generate\Create\Schema;class Schemas extends CatchModel{    /**     * @var string     */    protected $table = 'schemas';    /**     * @var string[]     */    protected $fillable = [        'id', 'module', 'name', 'columns', 'is_soft_delete', 'created_at', 'updated_at'    ];    /**     * @var array|string[]     */    public array $searchable = ['module' => 'like', 'name' => 'like'];    /**     * @var string[]     */    protected $casts = [        'is_soft_delete' => Status::class    ];    /**     *     * @param array $data     * @return boolean     * @throws Exception     */    public function storeBy(array $data): bool    {        $schema = $data['schema'];        $structures = $data['structures'];        $schemaId = parent::storeBy([            'module' => $schema['module'],            'name' => $schema['name'],            'columns' => implode(',', array_column($structures, 'field')),            'is_soft_delete' => $schema['deleted_at'] ? Status::Enable : Status::Disable        ], true);        try {            $schemaCreate = new Schema($schema['name'], $schema['engine'], $schema['charset'], $schema['collection'], $schema['comment']);            $schemaCreate->setStructures($structures)                         ->setModule($schema['module'])                         ->setCreatedAt($schema['created_at'])                         ->setCreatorId($schema['creator_id'])                         ->setUpdatedAt($schema['updated_at'])                         ->setDeletedAt($schema['deleted_at'])                         ->create();        } catch (Exception $e) {            parent::deleteBy($schemaId, true);            throw $e;        }        return true;    }    /**     * @param $id     * @return Model     */    public function show($id): Model    {        $schema = parent::firstBy($id);        $columns = [];        foreach (getTableColumns($schema->name) as $columnString) {            $column = DB::connection()->getDoctrineColumn(DB::connection()->getTablePrefix().$schema->name, $columnString);            $columns[] = [                'name' => $column->getName(),                'type' => $column->getType()->getName(),                'nullable' => ! $column->getNotnull(),                'default' => $column->getDefault(),                'comment' => $column->getComment()            ];        }        $schema->columns = $columns;        return $schema;    }    /**     * delete     *     * @param $id     * @param bool $force     * @return bool|null     */    public function deleteBy($id, bool $force = false): ?bool    {        $schema = parent::firstBy($id);        if ($schema->delete()) {            SchemaFacade::dropIfExists($schema->name);        }        return true;    }}
 |