2014-05-22 4 views
1

한 쿼리에서 여러 테이블의 행을 삭제하는 방법 (왼쪽 조인 사용). 쿼리 :Laravel 쿼리 작성기 및 LEFT JOIN이있는 행 삭제

DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` .... 

그래서, 나는이처럼 시도는 :

DB::table('deadline', 'job') 
    ->leftJoin('job', 'deadline.id', '=', 'job.deadline_id') 
    ->where('deadline.id', $id) 
    ->delete(); 

Laravel 왼쪽 조인 여러 테이블에서 삭제를 지원하지 않는 것 같습니다.

지원되는 방법이나 해결 방법이 있습니까?

+0

이 기능이 Eloquent의 새로운 기능인지는 확실하지 않지만 현재 작동합니다. 내가 왼쪽에 가입 쿼리를 삭제할 수있었습니다. –

답변

3

내 방식이 불가능한 것 같습니다. 그래서, 나는 이것을 좋아했습니다.

$q = 'DELETE deadline, job FROM deadline LEFT JOIN job ...where deadline.id = ?';   
$status = \DB::delete($q, array($id)); 

문서 : laravel이이 삭제에 참여 할 수 있도록하기 위해 http://laravel.com/docs/database#running-queries

0

DB::table(DB::raw('deadline, job'))가 작동 할 수 있습니다. 그렇지 않으면 수동으로 SQL을 작성하고 DB::statement()을 통해 호출해야합니다.

+0

감사하지만 작동하지 않습니다. – tasmaniski

1

은 간단합니다 - 그냥이에 Illuminate\Database\Query\Grammars\Grammar에 compileDelete 기능을 변경해야합니다 : -> 삭제

다음
public function compileDelete(Builder $query) 
{ 
    $table = $this->wrapTable($query->from); 

    $components = implode(' ', array(
     is_array($query->joins) ? $this->compileJoins($query, $query->joins) : '', 
     is_array($query->wheres) ? $this->compileWheres($query, $query->wheres) : '', 
     is_array($query->limit) ? $this->compilelimit($query, $query->limit) : '', 
     is_array($query->offset) ? $this->compileOffset($query, $query->offset) : '' 
    )); 

    return trim("delete $table from $table ".$components); 
} 

()는 예상대로 작동합니다. 나는 이것을 laravel framework repo에 pull 요청으로 이미 추가 했으므로 다음 버전으로 병합 될 수 있기를 바랍니다. 단지보아야합니다.

+0

Laravel에서 그러한 변경 계획을 구현할 계획이 있습니까? 사촌은 정말 수치스럽고, 문서 상단에는 아무런 언급도없고 예외도 던지지 않습니다. –

0
$query = 'DELETE courses,course_contents FROM courses 
      INNER JOIN course_contents ON course_contents.course_id = courses.id 
      WHERE courses.id = ?'; 

\DB::delete($query, array($id)); 
관련 문제