본문 바로가기

개발/PHP 라라벨

withTrashed does not exist 에러

라라벨을 이용하면 db 에서 소프트 삭제(일종의 임시 삭제) 라는 기능을 이용할수 있다.

실제 db row 를 삭제하는 것이 아니라 deleted_at 이라는 컬럼에 삭제 일자를 기록하여 삭제된 것처럼 동작하게 하는 것이다.

 

해당 model 에서 아래와 같이 SoftDeletes trait 를 사용하고 해당 테이블에 deleted_at 컬럼을 추가 하기만 하면 된다.

 

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Flight extends Model
{
    use SoftDeletes;

    /**
     * The attributes that should be mutated to dates.
     *
     * @var array
     */
    protected $dates = ['deleted_at'];
}

 

하지만 가끔 삭제된 row 를 조회해와야 할때가 있다.

이럴때는 withTrashed() 라는 함수를 이용하는데 deleted_at 이 null 이 아닌 경우까지 모두 조회해온다.

그런데 SoftDeletes 를 선언했는데 withTrashed does not exist 에러가 발생했다.

 

이 경우는 __construct 함수를 오버라이딩 할때 상위클랙스의 __construct 함수를 호출하지 않았기 때문에 발생할 가능성이 높다.

 

아래의 함수를 호출하여 오류를 수정했다.

 

public function __construct()
{
     parent::__construct();
}