16 Commits
Author SHA1 Message Date
bence 8bf495c89b Merge pull request 'where should accept $relation as null' (#26) from bugfix/fix-where-closure into master
soko-web/pipeline/head This commit looks good
Reviewed-on: #26
2023-07-08 14:38:40 +02:00
bence 74cb576a2e where should accept $relation as null
soko-web/pipeline/pr-master This commit looks good
2023-07-08 14:36:22 +02:00
bence 4283bc9bb1 Merge pull request 'implement multi relation loading' (#25) from feature/multiple-relations into master
soko-web/pipeline/head This commit looks good
Reviewed-on: #25
2023-06-17 14:32:56 +02:00
bence fc4c3234a7 implement multi relation loading
soko-web/pipeline/pr-master This commit looks good
2023-06-17 14:15:46 +02:00
bence 8d490e48aa Merge pull request 'RVRNEXT-31 change logic of checking external assets' (#24) from bugfix/RVRNEXT-31-allow-special-characters-for-local-assets into master
soko-web/pipeline/head This commit looks good
Reviewed-on: #24
2023-05-28 21:13:20 +02:00
bence 1dcab1abe2 RVRNEXT-31 change logic of checking external assets
soko-web/pipeline/pr-master This commit looks good
2023-05-28 21:00:43 +02:00
bence bda12177eb Merge pull request 'Revert "fix the case when relation is set to null"' (#23) from bugfix/fix-syncrelations into master
soko-web/pipeline/head This commit looks good
Reviewed-on: #23
2023-05-28 15:56:14 +02:00
bence f037de014e Revert "fix the case when relation is set to null"
soko-web/pipeline/pr-master This commit looks good
This reverts commit 25548176bb.
2023-05-28 15:54:54 +02:00
bence 8a1820275d Merge pull request 'iterate in $data until fields for empty relation are over' (#22) from bugfix/fix-model-loading-when-left-join-is-empty into master
soko-web/pipeline/head This commit looks good
Reviewed-on: #22
2023-05-28 15:48:31 +02:00
bence da2801560d iterate in $data until fields for empty relation are over
soko-web/pipeline/pr-master This commit looks good
2023-05-28 15:47:35 +02:00
bence dd855a6d6b Merge pull request 'fix the case when relation is set to null' (#21) from bugfix/fix-when-relation-is-set-to-null into master
soko-web/pipeline/head This commit looks good
Reviewed-on: #21
2023-05-28 15:47:27 +02:00
bence 25548176bb fix the case when relation is set to null
soko-web/pipeline/pr-master This commit looks good
2023-05-28 15:46:13 +02:00
bence f31b801c03 Merge pull request 'generated unique slug should be part of diff' (#20) from bugfix/generated-unique-slug-should-be-part-of-diff into master
soko-web/pipeline/head This commit looks good
Reviewed-on: #20
2023-05-28 15:45:58 +02:00
bence 346b1a0ca9 generated unique slug should be part of diff
soko-web/pipeline/pr-master This commit looks good
2023-05-28 15:45:19 +02:00
bence 6fdd25ae4b Merge pull request 'MAPG-238 include view with @include' (#19) from feature/MAPG-238-include-possibility-for-templating-engine into master
soko-web/pipeline/head This commit looks good
Reviewed-on: #19
2023-05-28 15:45:10 +02:00
bence 754a23706a MAPG-238 include view with @include
soko-web/pipeline/pr-master This commit looks good
2023-05-27 10:56:20 +02:00
5 changed files with 59 additions and 8 deletions

No files matched your search

+6 -6
View File
@@ -97,28 +97,28 @@ class Select
return $this;
}
public function where($column, string $relation = null, $value = null): Select
public function where($column, ?string $relation = null, $value = null): Select
{
$this->addWhereCondition('AND', $column, $relation, $value);
return $this;
}
public function orWhere($column, string $relation = null, $value = null): Select
public function orWhere($column, ?string $relation = null, $value = null): Select
{
$this->addWhereCondition('OR', $column, $relation, $value);
return $this;
}
public function having($column, string $relation = null, $value = null): Select
public function having($column, ?string $relation = null, $value = null): Select
{
$this->addHavingCondition('AND', $column, $relation, $value);
return $this;
}
public function orHaving($column, string $relation = null, $value = null): Select
public function orHaving($column, ?string $relation = null, $value = null): Select
{
$this->addHavingCondition('OR', $column, $relation, $value);
@@ -211,12 +211,12 @@ class Select
$this->joins[] = [$type, $table, $column1, $relation, $column2];
}
private function addWhereCondition(string $logic, $column, string $relation, $value): void
private function addWhereCondition(string $logic, $column, ?string $relation, $value): void
{
$this->conditions[self::CONDITION_WHERE][] = [$logic, $column, $relation, $value];
}
private function addHavingCondition(string $logic, $column, string $relation, $value): void
private function addHavingCondition(string $logic, $column, ?string $relation, $value): void
{
$this->conditions[self::CONDITION_HAVING][] = [$logic, $column, $relation, $value];
}
@@ -16,6 +16,8 @@ interface IPersistentDataManager
public function loadRelationsFromDb(Model $model, bool $recursive = false, array $withRelations = []): void;
public function loadMultiRelationsFromDb(array $models, string $relation, bool $useRelations = false, array $withRelations = []): void;
public function saveToDb(Model $model): void;
public function deleteFromDb(Model $model): void;
+7
View File
@@ -8,6 +8,8 @@ abstract class Model
protected static array $relations = [];
protected static array $multiRelations = [];
protected $id = null;
private array $snapshot = [];
@@ -27,6 +29,11 @@ abstract class Model
return static::$relations;
}
public static function getMultiRelations(): array
{
return static::$multiRelations;
}
public function setId($id): void
{
$this->id = $id;
+38 -1
View File
@@ -92,6 +92,40 @@ class PersistentDataManager implements IPersistentDataManager
}
}
public function loadMultiRelationsFromDb(array $models, string $relation, bool $useRelations = false, array $withRelations = []): void
{
if (count($models) === 0) {
return;
}
$parentModelType = get_class($models[0]);
$relationModelsSetter = 'set' . str_replace('_', '', ucwords($relation, '_'));
[$relationModelType, $reverseRelation] = call_user_func([$parentModelType, 'getMultiRelations'])[$relation];
$reverseRelationIdGetter = 'get' . str_replace('_', '', ucwords($reverseRelation, '_')) . 'Id';
$parentModelsById = [];
foreach ($models as $model) {
$parentModelsById[$model->getId()] = $model;
}
$select = new Select($this->dbConnection);
$select->where($reverseRelation . '_id', 'IN', array_keys($parentModelsById));
$relationsByParentModelId = [];
foreach ($this->selectMultipleFromDb($select, $relationModelType, $useRelations, $withRelations) as $relationModel) {
$reverseRelationId = $relationModel->$reverseRelationIdGetter();
if (!isset($relationsByParentModelId[$reverseRelationId])) {
$relationsByParentModelId[$reverseRelationId] = [];
}
$relationsByParentModelId[$reverseRelationId][] = $relationModel;
}
foreach ($parentModelsById as $parentModelId => $parentModel) {
$relationModels = $relationsByParentModelId[$parentModelId] ?? [];
$parentModel->$relationModelsSetter($relationModels);
}
}
public function saveToDb(Model $model): void
{
$this->syncRelations($model);
@@ -115,7 +149,7 @@ class PersistentDataManager implements IPersistentDataManager
if (count($modified) > 0) {
if ($model instanceof ModelWithSlug && isset($modified['slug'])) {
$modified['slug'] = $this->generateUniqueSlug($model, $modified['slug']);
$diff['slug']['new'] = $modified['slug'] = $this->generateUniqueSlug($model, $modified['slug']);
}
$modify->setId($id);
@@ -278,7 +312,10 @@ class PersistentDataManager implements IPersistentDataManager
$method = 'set' . str_replace('_', '', ucwords($relation, '_'));
$model->$method($relationModel);
} else {
while (substr($key, 0, strlen($relation . '__')) === $relation . '__') {
next($data);
$key = key($data);
}
}
next($relations);
+6 -1
View File
@@ -97,8 +97,13 @@ class Linker
fwrite($outputFileHandle, $extra[0]);
while (($line = fgets($inputFileHandle)) !== false) {
if (preg_match('/^\s*@include\((.*)\)\s*$/', $line, $matches) === 1) {
$include = file_get_contents(ROOT . '/views/' . $matches[1] . '.php');
fwrite($outputFileHandle, $include);
} else {
fwrite($outputFileHandle, $line);
}
}
fwrite($outputFileHandle, $extra[1]);
fclose($inputFileHandle);
@@ -134,7 +139,7 @@ class Linker
{
$output = [];
if (preg_match('/^[\w\/\.]+$/', $asset) === 1) {
if (preg_match('/^http(s)?/', $asset) !== 1) {
if (
empty($_ENV['DEV']) &&
filesize(ROOT . '/public/static/' . $asset) < self::INLINE_ASSET_LIMIT