TranslateSlug.php 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. <?php
  2. namespace App\Jobs;
  3. use App\Handlers\SlugTranslateHandler;
  4. use App\Models\BlogArticle;
  5. use Illuminate\Bus\Queueable;
  6. use Illuminate\Queue\SerializesModels;
  7. use Illuminate\Queue\InteractsWithQueue;
  8. use Illuminate\Contracts\Queue\ShouldQueue;
  9. use Illuminate\Foundation\Bus\Dispatchable;
  10. class TranslateSlug implements ShouldQueue
  11. {
  12. use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
  13. protected $article;
  14. /**
  15. * Create a new job instance.
  16. *
  17. * @return void
  18. */
  19. public function __construct(BlogArticle $article)
  20. {
  21. // 队列任务构造器中接收了 Eloquent 模型,将会只序列化模型的 ID
  22. $this->article = $article;
  23. }
  24. /**
  25. * Execute the job.
  26. *
  27. * @return void
  28. */
  29. public function handle()
  30. {
  31. // 请求百度 API 接口进行翻译
  32. $slug = app(SlugTranslateHandler::class)->translate($this->article->title);
  33. // 为了避免模型监控器死循环调用,我们使用 DB 类直接对数据库进行操作
  34. \DB::table('blog_articles')->where('id', $this->article->id)->update(['slug' => $slug]);
  35. }
  36. }