public static function instance(Db $db, Container $row) { $key = sha1($db->db . $db->table . serialize($row->assoc())); $has = Instance::has('DbjsonModel', $key); if (true === $has) { return Instance::get('DbjsonModel', $key); } else { return Instance::make('DbjsonModel', $key, new self($db, $row)); } }
private function related(Container $obj) { $fields = array_keys($obj->assoc()); foreach ($fields as $field) { if (endsWith($field, '_id')) { if (is_string($field)) { $value = $obj->{$field}; if (!is_callable($value)) { $fk = repl('_id', '', $field); $ns = $this->ns; $cb = function () use($value, $fk, $ns) { $db = container()->nbm($fk, $ns); return $db->find($value); }; $obj->event($fk, $cb); $setter = lcfirst(Inflector::camelize("link_{$fk}")); $cb = function (Container $fkObject) use($obj, $field, $fk) { $obj->{$field} = $fkObject->getId(); $newCb = function () use($fkObject) { return $fkObject; }; $obj->event($fk, $newCb); return $obj; }; $obj->event($setter, $cb); } } } } return $obj; }
public function save(Container $row, $object) { $this->foreign = $row->foreign(); $data = $this->clean($row->assoc()); $id = isAke($data, $this->pk(), null); unset($data[$this->pk()]); if (strlen($id)) { $row = $this->edit($id, $data, $object); } else { $row = $this->add($data, $object); } $this->foreign = null; return $row; }
public function row(array $values) { $class = $this; $obj = new Container(); $key = $this->key; $record = function () use($class, $obj, $key) { $tab = $obj->assoc(); return $class->push($key, $tab); }; $purge = function () use($class, $obj, $key) { $tab = $obj->assoc(); return $class->pop($key, $tab['id']); }; $date = function ($f) use($obj) { return date('Y-m-d H:i:s', $obj->{$f}); }; $hydrate = function ($data) use($obj) { if (Arrays::isAssoc($data)) { foreach ($data as $k => $v) { $obj->{$k} = $v; } } return $obj; }; $display = function ($field) use($obj) { return \Thin\Html\Helper::display($obj->{$field}); }; $tab = function () use($obj) { return $obj->assoc(); }; $asset = function ($field) use($obj) { return '/storage/img/' . $obj->{$field}; }; $obj->event('record', $record)->event('purge', $purge)->event('date', $date)->event('hydrate', $hydrate)->event('tab', $tab)->event('asset', $asset)->event('display', $display); return $obj->populate($values); }
private function related(Container $obj) { $fields = array_keys($obj->assoc()); foreach ($fields as $field) { if (fnmatch('*_id', $field)) { if (is_string($field)) { $value = $obj->{$field}; if (!is_callable($value)) { $fk = str_replace('_id', '', $field); $ns = $this->db; $cb = function () use($value, $fk, $ns) { $db = jdb($ns, $fk); return $db->find($value); }; $obj->event($fk, $cb); $setter = lcfirst(Inflector::camelize("link_{$fk}")); $cb = function (Container $fkObject) use($obj, $field, $fk) { $obj->{$field} = $fkObject->id; $newCb = function () use($fkObject) { return $fkObject; }; $obj->event($fk, $newCb); return $obj; }; $obj->event($setter, $cb); } } } } return $obj; }