BaseModel.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. namespace addons\StarChain\common\models;
  3. use common\models\base\BaseActiveRecord;
  4. use Yii;
  5. use yii\data\Pagination;
  6. /**
  7. * Base
  8. */
  9. class BaseModel extends BaseActiveRecord
  10. {
  11. /**
  12. * beforeSave
  13. *
  14. * @param boolean $insert
  15. * @return boolean
  16. */
  17. public function beforeSave($insert)
  18. {
  19. $time = time();
  20. if ($insert) {
  21. $this->hasAttribute('created_at') && $this->created_at = $time;
  22. $this->hasAttribute('updated_at') && $this->updated_at = $time;
  23. } else {
  24. $this->hasAttribute('updated_at') && $this->updated_at = $time;
  25. }
  26. return true;
  27. }
  28. /**
  29. * 批量添加
  30. *
  31. * @param array $data
  32. * @param boolean $auto_time 自动添加时间戳
  33. * @return integer
  34. */
  35. public static function batchInsert($data, $auto_time = true)
  36. {
  37. $time = time();
  38. $data = array_map(function ($item) use ($time, $auto_time) {
  39. return $auto_time ? array_merge([
  40. 'created_at' => $time,
  41. 'updated_at' => $time,
  42. ], $item) : $item;
  43. }, $data);
  44. $field = array_keys($data[array_key_first($data)]);
  45. return Yii::$app->db->createCommand()->batchInsert(
  46. static::tableName(),
  47. $field,
  48. $data
  49. )->execute();
  50. }
  51. /**
  52. * 获取分页数据
  53. *
  54. * @param integer $limit
  55. * @param callable $callback
  56. * @param string $order_by
  57. * @return array
  58. */
  59. public static function getPaginationList(
  60. int $limit, callable $callback = null, string $order_by = 'id desc'
  61. ) :array
  62. {
  63. $model = static::find();
  64. if (!empty($callback)) call_user_func($callback, $model);
  65. $pagination = new Pagination(['totalCount' => $model->count(), 'pageSize' => $limit]);
  66. $model->limit($pagination->limit)->offset($pagination->offset);
  67. $list = $model
  68. ->orderBy($order_by)
  69. ->asArray()
  70. ->all();
  71. $data['list'] = $list;
  72. $data['pagination'] = $pagination;
  73. $data['page_count'] = $pagination->pageCount;
  74. $data['row_count'] = intval($pagination->totalCount);
  75. $data['page_size'] = $pagination->getLimit();
  76. return $data;
  77. }
  78. }