app/Events
예를 들어,
declare(strict_types=1); namespace App\Events; use App\Models\User; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; final class UserRegistered { use Dispatchable; use InteractsWithSockets; use SerializesModels; public function __construct(public User $user) { // } }리스너 클래스에는 이벤트 및 청취자에 대한보다 심층적 인 지침은 공식 문서를 확인할 수 있습니다. https://www.php.cn/link/d9a8c56824cfbe66f28f85edbbe83e09
declare(strict_types=1); namespace App\Events; use App\Models\User; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; final class UserRegistered { use Dispatchable; use InteractsWithSockets; use SerializesModels; public function __construct(public User $user) { // } }
삭제 - 모델이 삭제되었습니다.
쓰레기 - 모델이 부드럽게 삭제되었습니다.dispatchesEvents
관계를 정의합니다. deleted
AppEventsAuthorDeleted
AppEventsAuthorDeleted
posts
모델에는 다음과 같습니다
IlluminateDatabaseEloquentSoftDeletes
관계를 정의합니다.
AppModelsPost
이벤트 클래스를 만들어 봅시다.
declare(strict_types=1); namespace App\Events; use App\Models\User; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; final class UserRegistered { use Dispatchable; use InteractsWithSockets; use SerializesModels; public function __construct(public User $user) { // } }이벤트 클래스를 만들 것입니다.
위 코드에서는 이벤트 클래스를 볼 수 있으며,이 클래스는 생성자에서 모델 인스턴스를 허용합니다. 이 이벤트 클래스는 저장되는 기사 인스턴스를 저장하기위한 간단한 컨테이너입니다. <code>AppModelsPost
dispatchesEvents
saving
AppEventsPostSaving
우리는 새로운 AppEventsPostSaving
리스너 클래스를 만들 것입니다 :
author
이벤트를 예약 할 때 자동으로 호출되는 메소드입니다. 저장중인 기사가 포함 된 IlluminateDatabaseEloquentSoftDeletes
방법에서는 간단한 공식을 사용하여 기사의 읽기 시간을 계산합니다. 이 예에서는 평균 판독 속도가 분당 265 단어라고 가정합니다. 우리는 읽기 시간을 몇 초 만에 계산 한 다음 기사 모델에서 속성이 계산된다는 것을 의미합니다. saving
read_time_in_seconds
우리는 새로운
위의 리스너에서
모델이 부드럽게 삭제 될 때마다 모든 저자의 기사도 부드럽게 삭제됩니다. AppListenersSoftDeleteAuthorRelationships
그건 그렇고,이를 달성하기 위해보다 강력하고 재사용 가능한 솔루션을 사용하고 싶을 수도 있습니다. 그러나이 기사의 목적 상, 우리는 그것을 간단하게 유지합니다.
declare(strict_types=1); namespace App\Events; use App\Models\User; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; final class UserRegistered { use Dispatchable; use InteractsWithSockets; use SerializesModels; public function __construct(public User $user) { // } }
AppModelsAuthor
함수를 사용하여 클로저를 대기시킬 수 있다는 것입니다. 이는 리스너의 코드가 동일한 요청 수명주기가 아닌 백그라운드에서 실행되도록 대기열로 밀려 나게한다는 것을 의미합니다. 다음과 같이 리스너를 queuable로 업데이트 할 수 있습니다.
함수로 클로저를 랩핑합니다.
메소드를 정의합니다. 모델 이벤트를 듣고 싶다면 관찰자 클래스에서
메소드를 정의합니다.
app/Observers
deleted
메소드가있는 관찰자를 만듭니다. 이 메소드는 deleted
모델의 인스턴스가 삭제되는 인스턴스를 허용합니다. 그런 다음 저자의 기사를 삭제하기 위해
AppModelsAuthor
deleted
declare(strict_types=1); namespace App\Events; use App\Models\User; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; final class UserRegistered { use Dispatchable; use InteractsWithSockets; use SerializesModels; public function __construct(public User $user) { // } }저자가 부드럽게 삭제 될 때 저자의 기사가 부드럽게 삭제되도록 테스트를 작성합니다. 테스트는 다음과 같이 보일 수 있습니다
deleted
AppModelsAuthor
declare(strict_types=1);
namespace App\Events;
use App\Models\User;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
final class UserRegistered
{
use Dispatchable;
use InteractsWithSockets;
use SerializesModels;
public function __construct(public User $user)
{
//
}
}
위의 코드를 실행하면 예상대로 데이터베이스에서 저자를 삭제합니다. 그러나 모델 이벤트는 예약되지 않습니다. 따라서 저자를 삭제할 때 이러한 모델 이벤트에 대한 청취자를 정의하면 실행되지 않습니다. <hr>
마찬가지로, Eloquent를 사용하여 Batch 업데이트 또는 모델을 삭제하는 경우 , <p>, </p> 및 <p> 모델 이벤트는 영향을받는 모델에 대해 예약되지 않습니다. 이벤트는 모델 자체에서 예약되기 때문입니다. 그러나 배치 업데이트 및 삭제가 업데이트되면 모델은 실제로 데이터베이스에서 검색되지 않으므로 이벤트가 예약되지 않습니다. <code>IlluminateSupportFacadesDB
예를 들어 다음 코드를 사용하여 저자를 삭제한다고 가정 해 봅시다.
메소드는 쿼리 빌더에서 직접 호출되므로 및 모델 이벤트는 해당 저자에 대해 예약되지 않습니다. IlluminateSupportFacadesDB
위 내용은 Laravel의 모델 이벤트에 대한 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!