2014-11-03 64 views
0

用戶可以選擇多個選項:Laravel - 從一個多選形式的hasMany關係存儲數據

<!-- Select Multiple --> 
    <div class="form-group"> 
     <label class="col-md-4 control-label" for="bedrooms">Bedrooms</label> 
     <div class="col-md-4"> 
     <select id="bedrooms" name="bedrooms[]" class="form-control" 
       multiple="multiple"> 
      <option value="1" selected="selected">Studio</option> 
      <option value="2">1</option> 
      <option value="3">2</option> 
      <option value="4">3</option> 
      <option value="5">4</option> 
      <option value="6">5</option> 
      <option value="7">6+</option> 
     </select> 
     </div> 
    </div> 

我要存儲在一個表中這些變量 - bedrooms,在不同的行,所以我可以包括他們在查詢中。每間臥室都將與criteria_id相關:

Structure

我曾嘗試使用這種查詢的$criteria->bedrooms()->saveMany(Input::get('property_type'));如圖Laravel的文檔中,但沒有成功 - 錯誤:

Argument 1 passed to Illuminate\Database\Eloquent\Relations\HasOneOrMany::save() 
must be an instance of Illuminate\Database\Eloquent\Model, string given 

$criteria->bedrooms()->attach(Input::get('property_type'));但這返回錯誤:Call to undefined method Illuminate\Database\Query\Builder::attach()

Criteria -

public function bedrooms() 
    { 
     return $this->hasMany('Bedroom'); 
    } 

非常感謝您的幫助。

+0

如果出現什麼錯誤? – Jim 2014-11-03 20:37:52

+0

參數1傳遞給Illuminate \ Database \ Eloquent \ Relations \ HasOneOrMany :: save()必須是Illuminate \ Database \ Eloquent \ Model的一個實例,給出的字符串爲 – Ben 2014-11-03 20:39:13

+0

爲什麼'$ criteria-> properties()'?不應該是'$ criteria-> bedrooms()'? – lukasgeiter 2014-11-03 20:45:44

回答

0

saveMany會在這種情況下工作,你只需要你輸入數組轉換到一個組的新車型。假設你知道標準編號,試試這個:

foreach (Input::get('bedrooms') as $bedroom) { 
     $selected[] = New Bedroom(['bedroom' => $bedroom]); 
    } 
    $criteria = Criteria::find($criteria_id)->bedrooms()->saveMany($selected); 
+0

謝謝@damiani的幫助。 – Ben 2014-11-04 18:14:17

0

的saveMany()方法需要的車型陣列,而不是ID的

+0

我也嘗試過'attach()',它會產生'Call到未定義的方法Illuminate \ Database \ Query \ Builder :: attach()'。你會如何建議我保存這個?當然有一個簡單的解決方案呢? – Ben 2014-11-03 20:42:13

+0

Bedroom :: whereIn('id',Input :: get('bedrooms')) - > update(['criteria_id'=> Input :: get('criteria_id')); – Jim 2014-11-03 20:45:40

+0

如果我正確理解您的表格/模型 – Jim 2014-11-03 20:46:00

0

我使用複選框在視圖:

@foreach($bedrooms as $row) 
<input type="checkbox" name="bedrooms[]" value="<?php echo $row->id ?>">{{$row->name}}<br/> 
@endforeach 

在模型製作BedroomCriteria .. 像這樣

class BedroomCriteria extends Eloquent { 
    public function Bedroom() { 
     return $this->belongsTo('Bedroom'); 
    } 

    public function Criteria() { 
     return $this->belongsTo('Criteria'); 
    } 

} 

然後保存代碼在控制器是這樣的

if (isset($input["bedrooms"])) { 
       foreach ($input['bedrooms'] as $check) { 
        $bedroom_criteria = array(
         "bedroom_id" => $check, 
         "criteria_id" => $input['id'] 
        ); 
        $bedroom_criteria= BedroomCriteria::create($bedroom_criteria); 
       } 
      }