내 생각에는 다음 구문을 사용하는 것이 었습니다.
MyModel::all()->delete();
그러나 그것은 효과가 없었습니다. 나는 그것이 매우 간단하다고 확신하지만 주제에 관한 문서를 검색했는데 찾을 수 없습니다!
답변
MyModel::all()->delete()
작동하지 않는 이유 는 all()
실제로 쿼리를 시작하고 Eloquent 객체 컬렉션을 반환 하기 때문 입니다.
잘라 내기 방법을 사용할 수 있습니다. Laravel 4 및 5에서 작동합니다.
MyModel::truncate();
개별 행 삭제를 기록하지 않고 테이블에서 모든 행을 삭제합니다.
답변
라 라벨 5.2+ 솔루션.
Model::getQuery()->delete();
테이블 이름으로 기본 빌더를 잡고 무엇이든하십시오. 그보다 더 깔끔 할 수는 없습니다.
라 라벨 5.6 솔루션
\App\Model::query()->delete();
답변
당신은 사용 Model::truncate()
하지 않도록 당신이 경우에 foreign_key_checks
(난 당신이 MySQL을 사용 가정).
DB::statement("SET foreign_key_checks=0");
Model::truncate();
DB::statement("SET foreign_key_checks=1");
답변
두 가지 방법이 시드 파일에서 사용되는 것을 보았습니다.
// Uncomment the below to wipe the table clean before populating
DB::table('table_name')->truncate();
//or
DB::table('table_name')->delete();
외래 키 를 설정하려면 첫 번째 키 를 사용할 수 없습니다 .
외래 키 제약 조건에서 참조되는 테이블을자를 수 없습니다
따라서 두 번째 것을 사용하는 것이 좋습니다.
답변
간접적 인 방법이 있습니다 :
myModel:where('anyColumnName', 'like', '%%')->delete();
예:
User:where('id', 'like' '%%')->delete();
라 라벨 쿼리 빌더 정보 : https://laravel.com/docs/5.4/queries
답변
Google을 통해이 스레드에 도달하는 사람들을 위해 다른 옵션을 추가하고 싶었습니다. 나는 이것을 달성해야했지만 truncate()
재설정 되는 자동 증가 값을 유지하고 싶었습니다 . 또한 DB::
모델 객체에서 직접 작업하기를 원했기 때문에 아무것도 사용하고 싶지 않았습니다 . 그래서 나는 이것을 가지고 갔다 :
Model::whereNotNull('id')->delete();
분명히 열은 실제로 존재해야하지만 표준 Eloquent 모델에서는 id
열이 존재하며 절대 null이 아닙니다. 이것이 최선의 선택인지는 모르겠지만 목적을 위해 작동합니다.
답변
Model::truncate()
오류가 발생 하여 사용할 수 없었습니다 .
SQLSTATE [42000] : 구문 오류 또는 액세스 위반 : 1701 외래 키 제약 조건에서 참조되는 테이블을자를 수 없습니다
불행히도 Model::delete()
작동하지 않습니다 (적어도 Laravel 5.0에서는).
비 정적 메소드 Illuminate \ Database \ Eloquent \ Model :: delete ()는 $ this가 호환되지 않는 컨텍스트에서 가정 할 때 정적으로 호출되지 않아야합니다.
그러나 이것은 효과가 있습니다.
(new Model)->newQuery()->delete()
일시 삭제가 설정된 경우 모든 행을 일시 삭제합니다. 일시 삭제 된 행을 포함하여 모든 행을 완전히 삭제하려면 다음과 같이 변경할 수 있습니다.
(new Model)->newQueryWithoutScopes()->forceDelete()
![](http://daplus.net/wp-content/uploads/2023/04/coupang_part-e1630022808943-2.png)