diff --git a/src/Alias.php b/src/Alias.php new file mode 100644 index 0000000..bfd0f0a --- /dev/null +++ b/src/Alias.php @@ -0,0 +1,56 @@ +currency === null) { + $this->currency = $this->childOf(Currency::class, [Model::SELF_KEY => 'currency_id']); + } + return $this->currency; + } + + protected static $fields = ['currency_id', 'alias']; + public static function add(ModelFactory $factory, $info) { + $input = array_intersect_key((array) $info, array_combine(self::$fields, self::$fields)); + $alias = $factory->find(Alias::class)->where([['currency_id', $input['currency_id']], ['alias', $input['alias']]])->one(); + $created = false; + $result = (object) compact('input', 'alias', 'created'); + if (!$alias) { + $alias = $factory->create(Alias::class, $input); + $created = $alias->save(); + $result->created = $created; + } + $result->source = $alias->asArray(); + return $result; + } + public function edit($info): bool { + $data = array_intersect_key((array) $info, array_combine(self::$fields, self::$fields)); + $edited = false; + foreach ($data as $field => $value) { + if ($this->{$field} != $value) { + $this->{$field} = $value; + $edited = true; + } + } + if ($edited) { + $edited = $this->save(); + } + return $edited; + } + public function asArray(): array { + $output = parent::asArray(); + $output['currency'] = $this->currency()->asArray(); + return $output; + } +} diff --git a/src/Currency.php b/src/Currency.php index a53d614..dd03e4a 100644 --- a/src/Currency.php +++ b/src/Currency.php @@ -38,6 +38,13 @@ class Currency extends Model { } return $this->sources; } + protected $aliases; + public function aliases() { + if ($this->aliases === null) { + $this->aliases = $this->parentOf(Alias::class, [Model::CHILD_KEY => 'currency_id']); + } + return $this->aliases; + } protected static $fields = ['code', 'name']; public static function add(ModelFactory $factory, $info) { @@ -73,6 +80,12 @@ class Currency extends Model { } return $edited; } + public function addAlias($info) { + $arr = (array) $info; + $arr['currency_id'] = (int) $this->id; + $result = Alias::add($this->factory, $arr); + return $result; + } public function addValue($info) { $arr = (array) $info; $arr['currency_id'] = (int) $this->id; @@ -85,4 +98,27 @@ class Currency extends Model { $result = Source::add($this->factory, $arr); return $result; } + + public static function find(ModelFactory $factory, string $query) { + $query = '%' . $query . '%'; + $currency = $factory->find(Currency::class)->where([ + ['code', $query, 'like'] + ])->one(); + if ($currency !== false and $currency !== null) { + return $currency; + } + $currency = $factory->find(Currency::class)->where([ + ['name', $query, 'like'] + ])->one(); + if ($currency !== false and $currency !== null) { + return $currency; + } + $alias = $factory->find(Alias::class)->where([ + ['alias', $query, 'like'] + ])->one(); + if ($alias !== false and $alias !== null) { + return $alias->currency(); + } + return false; + } }