2014-07-23 6 views
1

나는 push() 기능Laravel Eloquent push() 함수를 사용하는 방법?

내 코드는 여기 laravel를 사용하는 고군분투 :

가 저장됩니다
$company = new Company(array('name' => 'Company 1')); 
$company->persons[] = new Person(array('name' => 'Company 1 Person 1', 'mobile' => 12345)); 
$company->persons[] = new Person(array('name' => 'Company 1 Person 2', 'mobile' => 112233)); 
$company->push(); 

: 회사는 잘 저장됩니다 만, 회사 명, 그것은 company_id

0에 저장

Larave Documentations 메시지 :

때때로 당신은 wi 일 수 있습니다 sh를 사용하여 모델뿐만 아니라 모든 관계를 저장합니다.

$user->push(); 

무엇이 잘못 이렇게하려면, 당신은 푸시 방법을 사용할 수있다?

+0

이전에 'push()'를 사용 해본 적이 없지만 제대로 사용하지 않는 것 같습니다. 문서는 그다지 언급하지 않습니다. [이 질문에] 참조 (http://stackoverflow.com/questions/17035682/eloquent-push-and-save-difference) –

+0

나는 푸시가 미리 정의 된 관계에서만 작동하고 새 레코드는 생성하지 않는다고 생각합니다. – Jono20201

답변

2

그것은 교리 아니다;

push 그것을 할 수 있습니다,하지만 당신이

그리고 여기 당신이 (대신 좋은 작업을 수행 할 수있는 작업 방법) 찾을 수 아래 (좋은 쉽지 않을 것)과 쉬운 방법) :

// still you need already existing Company, so save it first 
$company = new Company(array('name' => 'Company 1')); 
$company->save(); 

$company->persons()->createMany(array(
    array('name' => 'Company 1 Person 1', 'mobile' => 12345), 
    array('name' => 'Company 1 Person 2', 'mobile' => 12345) 
)); 

Person 모델 새로운 저장하고 Company

와 연결됩니다 16,

push하지만, 그 일을 할 것입니다 당신은 이미 기존의 부모와 먼저 연관 자식 모델와 함께 할 경우에만 :

$company = Company::first(); // or any existing 

$person = new Person(array('name' => 'Company 1 Person 1', 'mobile' => 12345)); 
$person->company()->associate($company); 

$anotherPerson = new Person(array('name' => 'Company 1 Person 2', 'mobile' => 12345)); 
$anotherPerson->company()->associate($company); 

$company->persons[] = $person; 
$company->persons[] = $anotherPerson 
$company->push(); 

은 분명히이 더 많은 작업이며 확실히 내가 제안하는 방식이 아니다 .

+0

@decoz, doc에 쓰여진 줄이 매우 혼란 스럽다는 것에 동의하지 않습니까? 그들은 "모델뿐만 아니라 모든 관계를 저장하고 싶을 수도 있습니다"라고 말합니다. ??? –

+0

나는 그것으로 논쟁하지 않을 것이다. 그러나 정확하게 말하자면, Eloquent는 이러한 모델을 저장하고 있으며, 관계 부모와 연관시키지 않습니다. 이는 분명히 예상치 못한 일입니다. 내가 말했듯이 그것은 교리가 아닙니다. 다르게 관계를 처리하고 때로는 더 많은 관계를 기대하지만, 그것이 현재 작동하는 방식입니다. –

+0

하하하! 확실히 두 번째 방법은 전혀 선호되지 않습니다. 간단히 말해서'push()'는 기존의 것들과 만 사용될 수 있습니다. 나는'createMany' 메소드를 모른다. 감사! –