Laravel - 从多选表单中存储HasMany关系中的数据

时间:2014-11-03 20:33:52

标签: php laravel laravel-4 eloquent one-to-many

用户可以选择多个选项:

<!-- 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>

我想将这些变量存储在表{ - 1}}中的不同行中,以便我可以将它们包含在查询中。每间卧室都与bedrooms

相关联

Structure

我尝试使用Laravel的文档中显示的criteria_id等查询,但没有成功 - 错误:

$criteria->bedrooms()->saveMany(Input::get('property_type'));

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

非常感谢你的帮助。

3 个答案:

答案 0 :(得分:0)

saveMany()方法需要一组模型,而不是id的

答案 1 :(得分:0)

saveMany将在这种情况下工作,您只需要首先将输入数组转换为一组新模型。假设你知道Criteria ID,试试这个:

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

答案 2 :(得分: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);
                }
            }