ArticleMetaImages.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. /**
  3. * Author: lf
  4. * Blog: https://blog.feehi.com
  5. * Email: job@feehi.com
  6. * Created at: 2019/1/6 1:55 PM
  7. */
  8. namespace common\models\meta;
  9. use Yii;
  10. use yii\helpers\ArrayHelper;
  11. class ArticleMetaImages extends \common\models\ArticleMeta
  12. {
  13. public $keyName = "images";
  14. /**
  15. * @param $aid
  16. * @param $images
  17. * @throws \Throwable
  18. * @throws \yii\db\StaleObjectException
  19. */
  20. public function setImages($aid, $images)
  21. {
  22. !is_array($images) && $images = [];
  23. $oldImages = $this->getImagesByArticle($aid);
  24. $needAdds = array_diff($images, $oldImages);
  25. $needRemoves = array_diff($oldImages, $images);
  26. foreach ($needAdds as $needAdd){
  27. $metaModel = new self([
  28. 'aid' => $aid,
  29. 'key' => $this->keyName,
  30. 'value' => $needAdd
  31. ]);
  32. $metaModel->save();
  33. }
  34. foreach ($needRemoves as $needRemove){
  35. $this->find()->where(['key'=>$this->keyName])->andwhere(['value'=>$needRemove])->andwhere(['aid'=>$aid])->one()->delete();
  36. if( strpos( strrev($needRemove), '/' ) === 0 ){
  37. $fullName = Yii::getAlias('@frontend/web') . $needRemove;
  38. }else{
  39. $fullName = Yii::getAlias('@frontend/web/') . $needRemove;
  40. }
  41. @unlink($fullName);
  42. }
  43. }
  44. /**
  45. * @param $aid
  46. * @return int|string
  47. */
  48. public function getImagesCount($aid)
  49. {
  50. return $this->find()->where(['aid' => $aid, 'key' => $this->keyName])->count("aid");
  51. }
  52. public function getImagesByArticle($aid)
  53. {
  54. $result = $this->find()->where(['key'=>$this->keyName])->andWhere(['aid'=>$aid])->asArray()->all();
  55. $result = ArrayHelper::getColumn($result, 'value');
  56. return $result;
  57. }
  58. }