use Illuminate\Queue\Attributes\Queue;#[Queue('emails')]class SendWelcomeEmail implements ShouldQueue{ use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; public function handle(): void { // ... }}
v13.2.0以降、文字列の代わりにenumを渡すこともできます。
enum QueueName: string{ case Emails = 'emails'; case Orders = 'orders'; case Notifications = 'notifications';}#[Queue(QueueName::Emails)]class SendWelcomeEmail implements ShouldQueue{ // ...}
use Illuminate\Queue\Attributes\Connection;#[Connection('sqs')]class ProcessPayment implements ShouldQueue{ use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; public function handle(): void { // ... }}
こちらもenumを使えます。
enum QueueConnection: string{ case Redis = 'redis'; case Sqs = 'sqs'; case Database = 'database';}#[Connection(QueueConnection::Sqs)]class ProcessPayment implements ShouldQueue{ // ...}
use Illuminate\Queue\Attributes\DeleteWhenMissingModels;#[DeleteWhenMissingModels]class SendOrderConfirmation implements ShouldQueue{ public function __construct( protected Order $order, ) {} public function handle(): void { // $order が存在しない場合はこのジョブが削除される }}
use Illuminate\Queue\Attributes\WithoutRelations;#[WithoutRelations]class ExportUser implements ShouldQueue{ public function __construct( protected User $user, ) {}}
use Illuminate\Queue\Attributes\Backoff;use Illuminate\Queue\Attributes\Connection;use Illuminate\Queue\Attributes\DeleteWhenMissingModels;use Illuminate\Queue\Attributes\FailOnTimeout;use Illuminate\Queue\Attributes\MaxExceptions;use Illuminate\Queue\Attributes\Queue;use Illuminate\Queue\Attributes\Timeout;use Illuminate\Queue\Attributes\Tries;#[Queue('payments')]#[Connection('redis')]#[Tries(3)]#[Backoff(30, 60, 120)]#[Timeout(60)]#[MaxExceptions(2)]#[DeleteWhenMissingModels]class ProcessPayment implements ShouldQueue{ use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; public function __construct( protected Order $order, ) {} public function handle(PaymentService $payment): void { $payment->charge($this->order); }}
use Illuminate\Database\Eloquent\Attributes\Scope;class User extends Model{ #[Scope] public function active(Builder $query): void { $query->where('active', true); } #[Scope] public function verified(Builder $query): void { $query->whereNotNull('email_verified_at'); }}
// 従来はメソッド名に「scope」プレフィックスが必要だった// public function scopeActive(Builder $query): void// アトリビュートを使うと、メソッド名がそのままスコープ名になるUser::query()->active()->verified()->get();
// キュー名のenum定義enum Queue: string{ case Default = 'default'; case High = 'high'; case Low = 'low'; case Emails = 'emails'; case Orders = 'orders';}// コネクションのenum定義enum Connection: string{ case Redis = 'redis'; case Sqs = 'sqs'; case Database = 'database'; case Sync = 'sync';}
use Illuminate\Queue\Attributes\Queue;use Illuminate\Queue\Attributes\Connection;// enumを使った型安全な指定#[Queue(Queue::Orders)]#[Connection(Connection::Redis)]class ProcessOrder implements ShouldQueue{ // ...}