2016-07-19 2 views
2

업데이트 메서드가 실패한 경우 Im을 (를) 가져 오려고합니다.이 프로젝트 ID가 데이터베이스에 존재하지 않아 약 100 개의 레코드 만 있기 때문에 예외를 반환하지 않습니다.Laravel DB 업데이트 예외

try { 
    $project = DB::table('project') 
        ->where('prj_id', '987654') 
        ->update([ 
        'prj_status' => 'open', 
        'prj_updated_date' => Carbon::now() 
        ]); 

}catch(\Exception $e){ 

    dd($e); 
} 

답변

3

존재하지 않는 행의 업데이트가 SQL에서 실패하지 않습니다. UPDATE foo SET bar = 'foobar' WHERE 1 = 2;과 같은 쿼리를 실행하면 데이터베이스가 작업을 수행하고 0 행이 업데이트되었음을 ​​알리게됩니다.

업데이트는 업데이 트를 모든 행

했다 있는지 확인하기 위해 $ 프로젝트의 값을 확인해야합니다
+0

이유를 확인할 수있는 방법이 있습니다. 테이블을 덤프 할 때 모든 값을 업데이트하지 못했습니다. 문제는 반환 유형이 참인지 거짓인지입니다. ('project_id', '987654') -> 업데이트 ([ 'prj_status'=> '열기', 'prj_updated_date'=> : now() ]); if (! $ project) { return "프로젝트 업데이트에 오류가 있습니다"; ' –

+0

거짓이나 예외가없는 경우 행이 없기 때문에 쿼리에 문제가 있거나 데이터베이스에 문제가있는 경우 예외가 발생합니다. 만약 당신이 업데이트에서 false를 얻었고 어떤 행을 찾았는지 확인한다면 항상이 경우에 데이터베이스의 행을 찾으려고 할 수 있습니다. – rypskar

0

Laravel 5를 사용하는 경우 모델을 사용하여 결국 DB에 저장 될 내용을 지정하십시오.

그래서, 당신의 project 모델을 사용하여, 당신은 같은 것을해야합니다 :

$project = Project::findOrFail('987654') 
    ->update([ 
     'prj_status' => 'open', 
     'prj_updated_date' => Carbon::now() 
    ]); 

을 당신거야 찾을 수없는 예외가 존재하지 않는다면 무엇을 찾고 있는지의 ID입니다.

+0

안녕하지만이 프로젝트 –

+0

에 걸쳐 유창 쿼리를 사용하여 메신저 반대로 당신이 그와 함께 갔다 어떤 이유가 있나요 Eloquent를 사용하는 것? 유창 쿼리를 실행해도 존재하지 않는 행을 업데이트하려고하면 예외가 발생하지 않습니다. 그냥'null '을 반환합니다. 그래서'$ project'의 값을 검사하고 그것을 토대로 예외를 던져야합니다. – vsharper

+0

다른 테이블에 많은 조인 작업이 있으므로 각 모달에서 관계를 만드는 대신 유창한 쿼리를 사용하기 만하면 쉽게 느낄 수 있습니다. 시나리오가 더 많은 테이블과 필드 업데이트 및 메서드를 업데이트하는 데 실패한 경우에만 true false를 반환하고 특정 테이블을 업데이트하지 못한 이유를 확인하려고합니다. –

0
$projects_updated = DB::table('project') 
    ->where('prj_id', '987654') 
    ->update([ 
     'prj_status' => 'open', 
     'prj_updated_date' => Carbon::now() 
    ]); 

if($projects_updated) { 
    // n rows updated, do something 
} 
else { 
    // nothing updated 
} 
+0

감사합니다. calin 나는 이미이 행을 시도했으나 싶습니다. 실패한 경우 오류를 확인하십시오. 이 경우에만 true false를 반환합니다. –