2017-04-07 1 views
0

다음 코드는 데이터베이스에서 빈 값을 가져오고 데이터베이스에서 빈 문자열을 가져옵니다.Laravel 5.4 데이터베이스에 NULL을 저장하지 않음

1) 테이블에 nullable에서 확인 company 열을 확인하십시오

$customer->update(['company' => NULL]); 
+0

그리고 db에서 꺼내려면 NULL을 원하십니까? – dparoli

+0

@dparoli 예, 필드는 선택 사항이며 null 일 수 있으므로 null 인 경우 null이 아닌 빈 문자열과 데이터베이스의 빈 필드를 가져오고 싶습니다. –

답변

5

당신은 3 가지를 고려해야합니다. 그렇지 않으면 null을 거기에 넣을 수 없습니다.

2) Customer 모델 열의 $fillable 속성이 있는지 확인 company

3) 당신이 당신의 Customer 모델의 모든 뮤 테이터가없는 확인 - 그래서 당신은 값이 변경 될 수 있습니다 setCompanyAttribute 방법이없는 확인 자동으로 빈 문자열이 null로 설정되어있는 경우

+0

답변 해 주셔서 감사합니다. 오류가 있음을 발견했습니다. 회사에 대한 돌연변이 : // –

1

솔루션

당신이 널 (null)로 데이터베이스 내부의 필드를 원하는 당신은 모든 뮤 테이터를 사용하지 않는 경우 괜찮아.

내 경우에는 다음 코드 단편을 사용하고 있습니까?

public function setCompanyAttribute($value) 
{ 
    $this->attributes['company'] = ucfirst($value); 
} 

은 그럼 당신은 $ 값이 null인지 확인하고, 그렇지 않으면 null로 빈 문자열입니다 수동으로 설정해야합니다.

모든 모델에서이 작업을 자동으로 수행하려면 EventServiceProvider에서 빈 문자열을 null로 다시 설정할 수 있습니다.

먼저 모델의 모든 속성을 확인하고 임시 배열로 설정해야합니다. 모델 인스턴스의 setAttribute() 메소드 안에는 뮤 테이터가 존재할 때 검사가 수행됩니다. 그러나 그것은 정확히 당신이 원하지 않는 것입니다. 왜냐하면 그것은 정의 된 뮤 테이터가있는 모든 필드를 빈 찌름으로 설정하기 때문입니다. 대신 setRawAttribute를 사용하여 이전 특성을 임시 배열의 특성으로 덮어 씁니다.

확인한 값이 빈 문자열이 아닌 경우 해당 필드에 이미 존재하는 값이 사용되므로 안전합니다. 그렇지 않으면 빈 문자열이면 null이 설정됩니다.

희망이 있습니다.

+0

이것은 원래의 질문 –

+0

@ MarcinNabiałek sry에서 제시되지 않은 당신과 현재의 코드로 받아 들여진 것을 변경하는 것은 아주 이상합니다. 다시 변경했습니다. 다음 독자가 내가 그것을 고쳤다는 것을 보는 것이 도움이 될 것이라고 생각했다. 답변을 통해 검토해야 할 부분이 나와 있지만 가능한 해결책을 제시합니다. –

관련 문제