2014-03-05 2 views
0

글자 그대로 효율성 측면에서 아무 것도하지 않을 것이라는 것을 알고 있지만, 이것을 간단하게 요약 할 수 있습니다.Laravel model insert - 코드 크기 줄이기

$customer = new Customer; 
$customer->firstname = $data['f_name']; 
$customer->lastname = $data['l_name']; 
$customer->email = $data['email']; 
$customer->phone_number = $data['phone']; 
$customer->venue_id = Auth::user()->venue_id; 
$customer->save(); 

한 줄로되어 있습니까?

내 모델이 실제로 많이 팔리고 있습니다.

답변

1

당신은 다른 방법, 예를 들어 create() 방법이 아닌 큰 차이를 사용할 수있다 :

$customer = Customer::create(array(
    'firstname' => $data['f_name'], 
    'lastname' => $data['l_name'], 
    'email' => $data['email'], 
    'phone_number' => $data['phone'], 
    'venue_id' => Auth::user()->venue_id 
)); 

을 이렇게하려면, 당신은 당신의 Customer 모델 중 하나

protected $fillable = array('firstname', 'lastname', 'email', 'phone_number', 'venue_id') 

에 할당해야 또는 당신은 사용할 수 있습니다 반대쪽

// Assumed you have an id and password field 
protected $guarded = array('id', 'password'); 

또는 공백을 사용할 수 있습니다. 모든 필드 적용

protected $guarded = array(); 

따라서 모델의 create() 방법을 사용하여 대량 할당을 사용할 수 있습니다. $data 배열에 채워진 입력이 이미 있음에도 불구하고 필드 이름이 데이터베이스 테이블과 일치하지 않으므로 적절한 데이터베이스 필드 이름을 사용하여 $data 변수를 채울 수 있다면 create() 메서드에서 해당 $data 변수를 사용할 수 있습니다.

$inputs = Input::except('_token'); // all inputs without _token hidden field 

유효성 검사 이러한 입력은 다음과 같이 삽입 :

또한, 직접이 같은 Input 뭔가를 사용할 수 있습니다

Customer::create($inputs); 

또는 당신은 당신이있는 경우 unset($inputs['key'])를 사용하여 배열에서 항목을 삭제할 수 있습니다 다른 값은 $_post 배열에 있고 데이터베이스 테이블에 inserting/creating 전에 해당 필드를 제거하려고합니다. Mass Assignment에 대해 읽어보십시오.

1

sheika가 제안한대로 fillable 배열을 사용하고 입력 매개 변수가 models 속성과 일치하는지 확인하십시오. 이것은 일반적으로 나를 찾는 것입니다.

$model = Customer::create(Input::get()); 

또는

$model = new Customer; 
$model->fill(Input::get()); 
$model->save();