2014-03-06 2 views
1

Laravel Eloquent ORM을 사용하는 동안 문제가 발생했습니다. 데이터베이스에 새 Eloquent 모델을 삽입하면 데이터가 손상됩니다. 은 구체적으로 :Laravel 마지막으로 삽입 된 개체의 잘못된 속성

$newItem = new NotificationNewItem; 
$newItem->item_id = $item->id; // item_id is the primary key (returned by getKeyName()) 
$newItem->save(); 
return NotificationNewItem::find($item->id); 

이 코드는 동일해야 두 항목 반면

$newItem = new NotificationNewItem; 
$newItem->item_id = $item->id; 
$newItem->save(); 
return $newItem; 

같은 반환하지 않습니다, 그들은해야하지? 이상한 부분은 첫 번째 경우에 반환 된 JSON 객체 (브라우저에 직접 표시 함)가 데이터베이스에 삽입 된 객체이고 두 번째 경우 JSON 객체의 기본 키 (여기서는 item_id)가 0 데이터베이스에서 해당 항목의 기본 키가 3 (또는 다른 값) 인 경우에도 마찬가지입니다. 당신이 다시 오류를보고 싶다면 여기

는 laravel 코드입니다 : http://pastebin.com/9wcsnvSq 두 모델의 기능 insertAndGetElement (에서 "반환") 및 다른 기본 키와 그 반환 항목 (즉, 페이스트 빈에서 처음으로 하나를 반환있다 기본 키는 0 임).

도움을 많이 주시면 감사하겠습니다. 미리 감사드립니다. 로빈.

답변

3

그 문제에 대한 해결책 정확하게를하다 ((가) 저장 기본 키는 호출 한 후 0으로 설정) 기본 키를 auto_incrementing하지 않는 것으로 모델을 정의하십시오. 이렇게하려면 모델 선언에

public $incrementing = false; 

을 사용하면됩니다. #laravel의 AndreasLutro에게 감사드립니다.

0

난 당신이 원하는 정확히 모르겠지만, 마지막으로 삽입 된 ID가 이것을 사용 얻을 :

$newItem = new NotificationNewItem; 
$newItem->item_id = $item->id; 
$newItem->save(); 
// $newItem->id; this is lastinsertedid 
return $newItem->id; 
//NotificationNewItem::find($newItem->id); 
+0

이것은 내 질문이 아닙니다 : 방금 삽입 한 항목을 반환 할 수 있지만 문제는 해당 속성 (기본 키) 중 하나가 손상된 것입니다 (데이터가 있어야하는 것이 아닙니다. return $ newItem; item_id가 0 인 항목을 반환하지만 다른 항목은 같아야합니다. 그게 더 명확한가요? – hilnius

관련 문제