Alias models
This commit is contained in:
56
src/Alias.php
Normal file
56
src/Alias.php
Normal file
@ -0,0 +1,56 @@
|
||||
<?php
|
||||
namespace ProVM\Money;
|
||||
|
||||
use ProVM\Common\Alias\Model;
|
||||
use ProVM\Common\Factory\Model as ModelFactory;
|
||||
|
||||
/**
|
||||
* @property int $id
|
||||
* @property Currency $currency_id
|
||||
* @property string $alias
|
||||
*/
|
||||
class Alias extends Model {
|
||||
public static $_table = 'aliases';
|
||||
|
||||
protected $currency;
|
||||
public function currency() {
|
||||
if ($this->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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user