getMapper()->getTable(); } public function save() { self::initialize(); self::$repository->save($this); } protected function pkList(): array { self::initialize(); $pk = self::$repository->getMapper()->getPrimaryKeyModel(); $filter = []; foreach ($pk as $field) { $pkValue = $this->{$field}; if (empty($pkValue)) { throw new OrmInvalidFieldsException("Primary key '$field' is null"); } $filter[] = $this->{$field}; } return $filter; } public function delete() { self::$repository->delete($this->pkList()); } public static function new(mixed $data = null): static { self::initialize(); $data = $data ?? []; return self::$repository->entity(Serialize::from($data)->toArray()); } public static function get(mixed ...$pk) { self::initialize(); return self::$repository->get(...$pk); } public function fill(mixed $data) { $newData = self::new($data)->toArray(); ObjectCopy::copy($newData, $this); } public function refresh() { $this->fill(self::$repository->get(...$this->pkList())); } /** * @param IteratorFilter $filter * @param int $page * @param int $limit * @return static[] */ public static function filter(IteratorFilter $filter, int $page = 0, int $limit = 50): array { self::initialize(); return self::$repository->getByFilter($filter, page: $page, limit: $limit); } public static function all(int $page = 0, int $limit = 50): array { self::initialize(); return self::$repository->getByFilter(page: $page, limit: $limit); } public static function joinWith(string ...$tables): Query { self::initialize(); $tables[] = self::$repository->getMapper()->getTable(); return ORM::getQueryInstance(...$tables); } public function toArray(bool $includeNullValue = false): array { if ($includeNullValue) { return Serialize::from($this)->toArray(); } return Serialize::from($this)->withDoNotParseNullValues()->toArray(); } /** * @param Query $query * @return static[] */ public static function query(Query $query): array { self::initialize(); return self::$repository->getByQuery($query); } protected static function discoverClass(): string|Mapper { return static::class; } }__halt_compiler();----SIGNATURE:----QvE8mMrl4HVDWo2nAov8P/7rChvLBNNvQha2fp2wE/mqW7M0qe0/opl/kZH80BCKyPCB8YT3i16LHuro9Ze+AnTODXRVFNXZwvcnadqcClc7md1D+PS9Qzbi8yR7mybAn90picvswxxf+S+GDDdCOcS5dQp7mfU08ZdG9rJ/17fAG4zyRsr1fX8PbdWpJjRFX0IlP427zRx1LEuGOmBrB5ifm6E8spxSaMDiOHtqG/kOXdU0Ji9eXfobGB7cZa7mFAqRsLv4WF0HN6WejybC5S9nAd7CWGcrEsRxCTw6n6NzcHoUEW0YQs8s10E9uBIR4U4o8h8jrqtm7AUQR8WtA5udl3QjFfTnjuUajwAj3IqM3lBkqxrjJZroN5il0bT+XtZL9GiHpbwC3owfudhYGxB2sZsTrSlOmHvuiU3adq3N4obinG3aHl6ivfRLAlq6V1dhkaTWKtEZ71pBrUGd5sudJgE3fHxZGVu61Qhku+VqEi3P/7xStPko8pCDgIAcZp6ydut6ij9fg7G197uF6ujyuX0TtNEDZWm3TAAJgt2XgjFknvN+jAMKSFRQakV/2SqfQKHIBJuL8ddvc2/JZ754h781LVmiDRh1i4cG4Hrf9QaMjwZS8pt7QdbjgR7ncAhGDz9zUipleuXuq5N/uR20sEgmVNUhAGMBXJDOn/0=----ATTACHMENT:----MTI5Njg1MzYxNTcwOTY5IDM5NDEzODAzNDQwMzcxMDIgMzE2Njg4Nzk4MDUyNzg3