transaction($function); } /** * @return \PDO */ public static function getPdo() { return Capsule::connection(static::$_connection)->getPdo(); } /** * @return Connection */ public static function getConnection() { return Capsule::connection(static::$_connection); } /** * @return Builder */ public static function getTableAs() { return static::getConnection()->table(static::$_table . " as " . static::$_table_as); } /** * @return Builder */ public static function getTable() { return static::getConnection()->table(static::$_table); } /** * @param $query Builder|callable * @return Builder */ public static function resolveQuery($query) { if (is_callable($query)) { $query = $query(static::getTableAs()); } return $query; } /** * @param $dbo LuDbo * @param array $ignoreList * @return array */ public static function prepareDbo($dbo, $ignoreList = []) { $json = $dbo->jsonSerialize(); foreach (array_merge(static::$_dboIgnoreList, $ignoreList) as $ignore) { unset($json[$ignore]); } $json = LuArrayUtils::camelCaseToSnake($json); return $json; } /** * @param $query Builder|callable * @return LuDBo[] */ public static function getMultiple($query) { $query = static::resolveQuery($query); $string = $query->aggregate("json_agg", [static::$_table_as]); $json = json_decode($string, true); $data = LuArrayUtils::snakeToCamelCase($json); return call_user_func([static::$_dboArrayClass, 'jsonDeserialize'], $data); } /** * @param $query Builder|callable * @return LuDBo */ public static function getSingle($query) { $query = static::resolveQuery($query); $string = $query->take(1)->aggregate("json_agg", [static::$_table_as]); if (is_null($string)) { return null; } $json = json_decode($string, true); $data = LuArrayUtils::snakeToCamelCase($json); if (count($data) < 1) { return null; } return call_user_func([static::$_dboClass, 'jsonDeserialize'], $data[0]); } /** * @param $id * @return LuDbo */ public static function getSingleById($id) { return static::getSingle(static::getTableAs()->where("id", "=", $id)); } /** * @param $id * @return int */ public static function deleteSingleById($id) { return static::getTableAs()->delete($id); } /** * @param $query Builder|callable * @return int */ public static function deleteMultiple($query) { $query = static::resolveQuery($query); return $query->delete(); } /** * @param $dbo LuDbo * @param string[] $ignoreList * @return bool */ public static function addSingle($dbo, $ignoreList = []) { $json = static::prepareDbo($dbo, $ignoreList); return static::getTable()->insert($json); } /** * @param $dbo LuDbo * @param string[] $ignoreList * @return int */ public static function addSingleId($dbo, $ignoreList = []) { $json = static::prepareDbo($dbo, $ignoreList); unset($json['id']); return static::getTable()->insertGetId($json); } /** * @param $dbo LuDbo * @param string[] $ignoreList * @return int */ public static function editSingleById($dbo, $ignoreList = []) { $json = static::prepareDbo($dbo, $ignoreList); $id = $json['id']; unset($json['id']); return static::getTable()->where("id", "=", $id)->update($json); } /** * @param $dbo LuDbo * @param $query Builder|callable * @param string[] $ignoreList * @return int */ public static function editMultiple($dbo, $query, $ignoreList = []) { $query = static::resolveQuery($query); $json = static::prepareDbo($dbo, $ignoreList); return $query->update($json); } }