Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

LuDataAccess.php 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <?php
  2. namespace Luticate\Utils\DataAccess;
  3. use Illuminate\Database\Capsule\Manager as Capsule;
  4. use Illuminate\Database\Connection;
  5. use Illuminate\Database\Query\Builder;
  6. use Luticate\Utils\Business\LuArrayUtils;
  7. use Luticate\Utils\Business\LuStringUtils;
  8. use Luticate\Utils\Dbo\LuDbo;
  9. abstract class LuDataAccess {
  10. protected static $_connection = "mydb";
  11. protected static $_table = "mydb_table";
  12. protected static $_table_as = "__t__";
  13. protected static $_dboClass = LuDbo::class;
  14. protected static $_dboArrayClass = LuDbo::class;
  15. protected static $_dboIgnoreList = [];
  16. public static function transact(\Closure $function)
  17. {
  18. return static::getConnection()->transaction($function);
  19. }
  20. /**
  21. * @return \PDO
  22. */
  23. public static function getPdo()
  24. {
  25. return self::getConnection()->getPdo();
  26. }
  27. /**
  28. * @return Connection
  29. */
  30. public static function getConnection()
  31. {
  32. return Capsule::connection(static::$_connection);
  33. }
  34. /**
  35. * @return Builder
  36. */
  37. public static function getTableAs()
  38. {
  39. return static::getConnection()->table(static::$_table . " as " . static::$_table_as);
  40. }
  41. /**
  42. * @return Builder
  43. */
  44. public static function getTable()
  45. {
  46. return static::getConnection()->table(static::$_table);
  47. }
  48. /**
  49. * @param $query Builder|callable
  50. * @return Builder
  51. */
  52. public static function resolveQuery($query)
  53. {
  54. if (is_callable($query)) {
  55. $query = $query(static::getTableAs());
  56. }
  57. return $query;
  58. }
  59. /**
  60. * @param $dbo LuDbo
  61. * @param array $ignoreList
  62. * @return array
  63. */
  64. public static function prepareDbo($dbo, $ignoreList = [])
  65. {
  66. $json = $dbo->jsonSerialize();
  67. foreach (array_merge(static::$_dboIgnoreList, $ignoreList) as $ignore) {
  68. unset($json[$ignore]);
  69. }
  70. $json = LuArrayUtils::camelCaseToSnake($json);
  71. return $json;
  72. }
  73. /**
  74. * @param $query Builder|callable
  75. * @return LuDBo[]
  76. */
  77. public static function getMultiple($query)
  78. {
  79. $query = static::resolveQuery($query);
  80. $string = $query->aggregate("json_agg", [static::$_table_as]);
  81. if (is_null($string)) {
  82. return [];
  83. }
  84. $data = LuStringUtils::convertJsonString($string);
  85. return call_user_func([static::$_dboArrayClass, 'jsonDeserialize'], $data)->getArray();
  86. }
  87. /**
  88. * @param $query Builder|callable
  89. * @return LuDBo
  90. */
  91. public static function getSingle($query)
  92. {
  93. $query = static::resolveQuery($query);
  94. $string = $query->take(1)->aggregate("json_agg", [static::$_table_as]);
  95. if (is_null($string)) {
  96. return null;
  97. }
  98. $json = json_decode($string, true);
  99. $data = LuArrayUtils::snakeToCamelCase($json);
  100. if (count($data) < 1) {
  101. return null;
  102. }
  103. return call_user_func([static::$_dboClass, 'jsonDeserialize'], $data[0]);
  104. }
  105. /**
  106. * @param $id
  107. * @return LuDbo
  108. */
  109. public static function getSingleById($id)
  110. {
  111. return static::getSingle(static::getTableAs()->where("id", "=", $id));
  112. }
  113. /**
  114. * @param $id
  115. * @return int
  116. */
  117. public static function deleteSingleById($id)
  118. {
  119. return static::getTableAs()->delete($id);
  120. }
  121. /**
  122. * @param $query Builder|callable
  123. * @return int
  124. */
  125. public static function deleteMultiple($query)
  126. {
  127. $query = static::resolveQuery($query);
  128. return $query->delete();
  129. }
  130. /**
  131. * @param $dbo LuDbo
  132. * @param string[] $ignoreList
  133. * @return bool
  134. */
  135. public static function addSingle($dbo, $ignoreList = [])
  136. {
  137. $json = static::prepareDbo($dbo, $ignoreList);
  138. return static::getTable()->insert($json);
  139. }
  140. /**
  141. * @param $dbo LuDbo
  142. * @param string[] $ignoreList
  143. * @return int
  144. */
  145. public static function addSingleId($dbo, $ignoreList = [])
  146. {
  147. $json = static::prepareDbo($dbo, $ignoreList);
  148. unset($json['id']);
  149. return static::getTable()->insertGetId($json);
  150. }
  151. /**
  152. * @param $dbo LuDbo
  153. * @param string[] $ignoreList
  154. * @return int
  155. */
  156. public static function editSingleById($dbo, $ignoreList = [])
  157. {
  158. $json = static::prepareDbo($dbo, $ignoreList);
  159. $id = $json['id'];
  160. unset($json['id']);
  161. return static::getTable()->where("id", "=", $id)->update($json);
  162. }
  163. /**
  164. * @param $dbo LuDbo
  165. * @param $query Builder|callable
  166. * @param string[] $ignoreList
  167. * @return int
  168. */
  169. public static function editMultiple($dbo, $query, $ignoreList = [])
  170. {
  171. $query = static::resolveQuery($query);
  172. $json = static::prepareDbo($dbo, $ignoreList);
  173. return $query->update($json);
  174. }
  175. }