2014-11-03 123 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); 
       } 
      }