2013-09-24 48 views
0

我有一个模型类别。类别有很多本地化。当我店铺分类,我有这方面的投入:HasMany关系旧输入

{{ Form::text('title[en]', Input::old('title')) }} 
{{ Form::text('title[ru]', Input::old('title')) }} 

其中我喜欢这家店在我CONTROLER:

 // Gett all inputs 
     $inputs = Input::all(); 

     // Create resource 
     $item = Category::create([]); 

     // Create localization 
     foreach(Input::get('title') as $locale => $title) 
     { 
      $locale = new Localization(['locale' => $locale, 'title' => $title]); 
      $locale = $item->localization()->save($locale); 
     } 

这一工程伟大的,但什么是更新这种关系的最佳做法?目前我正在尝试与Form :: model绑定。

@foreach($locales as $key => $locale) 
{{ Form::text('title['.$locale.']', $model->translate($locale)->title, ['class' => 'form-control']) }} 
@endforeach 

我不知道如何输入::老能在这种情况下工作,所以现在我使用$模型 - >翻译($区域) - >标题,以获得正确的值。基本上更新/验证部分实际上并不工作。你可以建议改变以验证这种关系并更新它?

回答

0

今天我发现一个工作解决方案存储/更新与验证的关系。我希望这是最好的/最简单的方式来做到这一点。我创建了一个具有验证输入的新数组,并相应地更改了查看错误。

这是我的更新控制器。

public function update($id) 
{ 
    // Find resource 
    $item = Category::find($id); 

    foreach(Input::get('title') as $locale => $title) 
    { 
     $v['title_'.$locale] = $title; 
    } 

    // Attempt validation 
    if($item->validate($v)) 
    { 
     foreach(Input::get('title') as $locale => $title) 
     { 
      $localization = $item->translate($locale); 
      $localization->title = $title; 
      $localization->save(); 
     } 

     return Redirect::action('[email protected]', [$item->id]); 
    } 
    else 
    { 
     // Failure, get errors 
     $errors = $item->errors(); 

     return Redirect::back() 
      ->withInput() 
      ->with('errors', $errors); 
    } 
} 

这是更新视图;

{{ Form::model($model, ['action' => ['[email protected]', $model->id], 'method' => 'PUT']) }} 
    @foreach($locales as $key => $locale) 
     <div id="{{ $locale }}"> 
      <div class="form-group"> 
       {{ Form::label('title['.$locale.']', _('admin.title_'.$locale)) }} 
       {{ Form::text('title['.$locale.']', $model->translate($locale)->title, ['class' => 'form-control']) }} 
       @if($errors->has('title_'.$locale)) 
        <div class="help-block alert alert-danger">{{ $errors->first('title_'.$locale) }}</div> 
       @endif 
      </div> 
     </div> 
    @endforeach 
{{ Form::close() }} 

这样你可以很容易地CRUD,验证所有类型的关系(输入数组)在Laravel。