2014-10-11 2 views
3

주소 모델과 다형성 관계가있는 계정 모델이 있습니다. 이것은과 같이 설정 일대일 releationship로 설정되어일대일 관계로 구성된 Laravel 양식 바인딩

계정 :

public function address() 
{ 
    return $this->morphOne('Address', 'hasAddress', 'add_hasaddress_type', 'add_hasaddress_id', 'act_id'); 
} 

주소 : 내 양식에

public function hasAddress() 
{ 
    return $this->morphTo('hasAddress', 'add_hasaddress_type', 'add_hasaddress_id'); 
} 

가 나는 또한이 계정을 편집 할 수 주소 필드. 다음을 수행하여 계정 개체를 간단하게 바인딩 할 수 있습니다.

{{ Form::model($account, array('route' => array('accounts/edit', $account->act_id), 'method' => 'put')) }} 
    {{ Form::label('act_name', 'Account Name:') }} 
    {{ Form::text('act_name', Input::old('act_name')) }} 

이 필드에 올바르게 채워집니다. 하지만 주소 입력란을 채우려면 어떻게해야합니까? 조사한 바에 따르면,해야 할 일 :

관계의 값에 액세스 할 수는 있지만 작동하지 않습니다. 비슷한 제목으로 SO에 의해 제안

는 또한

{{ Form::text('address[add_city]', Input::old('address[add_city]')) }} 

을 시도했다. 이 두 가지 모두 이전 입력을 사용하거나 사용하지 않고 시도했습니다. 이것은 단지 다형 관계로 작동하지 않습니까? 아니면 제가 잘못한 것을하고 있습니까?

또한 이러한 양식을 컨트롤러에서 어떻게 처리합니까?

관계에 대한 어떤 것도 모델 바인딩 문서 형식이 아니며 주로 검색을 수행하면 일대 다 바인딩을 요구하는 사람들이 생깁니다.

답변

6

그것은 어떤 * - 투 - 일 관계와 함께 작동 (위해 대다 즉, 그것은 작동하지 않습니다 모델의 컬렉션입니다.) : 전혀 Input::old 또는 null에 대한

// prepare model with related data - eager loading 
$account = Account::with('address')->find($someId); 

// or lazy loading 
$account = Account::find($someId); 
$account->load('address'); 

// view template 
{{ Form::model($account, ...) }} 
    Account: {{ Form::text('acc_name') }} 
    City: {{ Form::text('address[add_city]') }} 
{{ Form::close() }} 

필요 없음 기본값으로 충분합니다. Laravel은이 순서 (Docs are wrong here!)의 데이터를 채울 것입니다 : 당신이 의 관계를로드해야합니다

1. old input 
2. bound data 
3. value passed to the helper 

마음이 (동적 호출이 경우 작동하지 않습니다).

또 다른 것은 입력 후 처리 - 당신이 같은 필요하므로 Laravel은 자동으로 관련 모델을 수화하지 않습니다

$accountData = Input::only(['acc_name', ... other account fields]); 
// or 
$accountData = Input::except(['address']); 
// validate etc, then: 
$account->fill($accountData); 

$addressData = Input::get('address'); 
// validate ofc, then: 
$account->address->fill($addressData); 
+0

굉장합니다. 고마워. 내가 방금 관련 데이터를로드하는 부분을 놓친 것 같습니다. 그게 네가해야 할 일이라는 것을 몰랐다. – Troncoso

관련 문제