Kbs.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. namespace app\admin\model\workorder;
  3. use think\Model;
  4. use traits\model\SoftDelete;
  5. use think\Exception;
  6. use app\admin\model\workorder\Category;
  7. class Kbs extends Model
  8. {
  9. use SoftDelete;
  10. // 表名
  11. protected $name = 'workorder_kbs';
  12. // 自动写入时间戳字段
  13. protected $autoWriteTimestamp = 'int';
  14. // 定义时间戳字段名
  15. protected $createTime = 'createtime';
  16. protected $updateTime = 'updatetime';
  17. protected $deleteTime = 'deletetime';
  18. // 追加属性
  19. protected $append = [
  20. 'status_text'
  21. ];
  22. protected static function init()
  23. {
  24. self::afterInsert(function ($row) {
  25. $pk = $row->getPk();
  26. $row->getQuery()->where($pk, $row[$pk])->update(['weigh' => $row[$pk]]);
  27. self::catAddKbs($row);
  28. });
  29. self::afterUpdate(function ($row) {
  30. $category_id = explode(',', $row['category_id']);
  31. $category_id_old = isset($row['category_id_old']) ? explode(',', $row['category_id_old']) : [];
  32. $delete_cats = array_diff($category_id_old, $category_id);
  33. self::catDelKbs(implode(',', $delete_cats), $row->id);
  34. // 为对应分类添加知识点关联
  35. self::catAddKbs($row);
  36. });
  37. }
  38. /**
  39. * 分类添加知识点关联
  40. */
  41. public static function catAddKbs($row)
  42. {
  43. $cats = Category::all($row->category_id);
  44. foreach ($cats as $index => $cat) {
  45. $kbs_ids = $cat->kbs_ids ? explode(',', $cat->kbs_ids) : [];
  46. if (!in_array($row->id, $kbs_ids)) {
  47. $kbs_ids[] = $row->id;
  48. $cat->kbs_ids = implode(',', $kbs_ids);
  49. $cat->save();
  50. }
  51. }
  52. }
  53. /**
  54. * 删除分类的关联知识点
  55. */
  56. public static function catDelKbs($category_id, $row_id)
  57. {
  58. $cats = Category::all($category_id);
  59. foreach ($cats as $index => $cat) {
  60. $kbs_ids = $cat->kbs_ids ? explode(',', $cat->kbs_ids) : [];
  61. $kbs_ids_temp = [];
  62. foreach ($kbs_ids as $key => $kbs_id) {
  63. if ($kbs_id != $row_id) {
  64. $kbs_ids_temp[] = $kbs_id;
  65. }
  66. }
  67. $cat->kbs_ids = implode(',', $kbs_ids_temp);
  68. $cat->save();
  69. }
  70. }
  71. public function getStatusList()
  72. {
  73. return ['0' => __('Status 0'), '1' => __('Status 1')];
  74. }
  75. public function getStatusTextAttr($value, $data)
  76. {
  77. $value = $value ? $value : (isset($data['status']) ? $data['status'] : '');
  78. $list = $this->getStatusList();
  79. return isset($list[$value]) ? $list[$value] : '';
  80. }
  81. public function category()
  82. {
  83. return $this->belongsTo('Category', 'category_id', 'id', [], 'LEFT')->setEagerlyType(0);
  84. }
  85. }