Laravel 4 - 更新多对多

时间:2014-08-08 15:14:46

标签: laravel laravel-4

我目前正在尝试修改一个具有多对多关系的更新页面。它完美地更新了我的数据库,但是我现在想要实现的是在我的视图中实际显示我的多选列表中已经选择的项目。

它目前只显示了油库作业的整个列表,而不是当前选择的那些应该以某种方式来自查询的作业。

所以,它目前看起来像这样:

enter image description here

如果先前选择了仪器技师,我需要它看起来像这样。

enter image description here

相关文件如下:

模型

OilGasJob.php

<?php 

class OilGasJob extends \Eloquent {

    protected $table = 'oilgasjobs';

     public function industryjobs()
    {
        return $this->belongsToMany('IndustryJob');
    }


}

IndustryJob.php

<?php 

class IndustryJob extends \Eloquent {

    protected $table = 'industryjobs';


     public function oilgasjobs()
    {
        return $this->belongsToMany('OilGasJob');
    }


}

CONTROLLER(创建页面和商店)

    public function edit($id)
    {

        $industryjob = IndustryJob::find($id);

        if(is_null($id))
        {
            return Redirect::to('/admin/industry-jobs')->with('message', 'This division job is not valid');
        }

        View::share('page_title', 'Edit Division Job');

        return View::make('admin/industry-jobs/edit')->with('industryjob',$industryjob);

    } 

    public function update($id)

    {

        $rules = array(
                'job_title' => 'Required|Min:3|Max:80'
        );

        $validation = Validator::make(Input::all(), $rules);

        If ($validation->fails())
        {
            return Redirect::back()->withErrors($validation);
        } else {

        $industryjob = IndustryJob::find($id);

        if(is_null($id))
        {
            return Redirect::to('/admin/industry-jobs')->with('message', 'This divison job is not valid');
        }

        View::share('page_title', 'Edit Division Job');

        $industryjob->job_title = Input::get('job_title');
        $industryjob->slug    = Str::slug(Input::get('job_title'));
        $industryjob->job_description    = Input::get('job_description');
        $industryjob->job_qualifications    = Input::get('job_qualifications');

        $industryjob->save();

        $industryjob->oilgasjobs()->sync(Input::get('oilgasjobs'));

        return Redirect::to('/admin/industry-jobs')->with('message', 'Division Job updated successfully');
        }

    }

查看

 {{ Form::open(array('url' => URL::to('admin/industry-jobs/edit/'.$industryjob->id), 'class'=>'form-horizontal', 'method' => 'POST')) }}

            <div class="form-group">
                <label class="col-md-2 control-label" for="industry_name">Job Title (*)</label>

            <div class="col-md-10">
                    <input class="form-control" type="text" name="job_title" id="job_title" value="{{ $industryjob->job_title }}" />
                </div>
            </div>



      <!-- Industry Type  -->
       <div class="form-group">
       <label class="col-md-2 control-label" for="body">Related Jobs in Oil & Gas</label>
        <div class="col-md-10">
        <select name="oilgasjobs[]" id="oilgasjobs[]" size="6" class="form-control" multiple>
            @foreach(OilGasJob::orderBy('job_title', 'ASC')->get() as $oilgasjob)
                <option value="{{ $oilgasjob->id }}" >{{ $oilgasjob->job_title }}</option>
            @endforeach
        </select>
        </div>
    </div>
    <!-- ./ Industry Type -->



    <!-- Form Actions -->
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <button type="reset" class="btn btn-default">Reset</button>
            <button type="submit" class="btn btn-success">Update Job</button>
        </div>
    </div>
    <!-- ./ form actions -->


{{ Form::close() }}

2 个答案:

答案 0 :(得分:1)

edit方法中添加以下代码:

// ...
$linkedOilgasjob = DB::table('oilgasjob_industryjob')->lists('oilgasjob_id');
return View::make('admin/industry-jobs/edit'
                  ,compact('industryjob')
                  ,compact('linkedOilgasjob'));

然后在你看来

<option value="{{ $oilgasjob->id }}" {{ in_array($oilgasjob->id,linkedOilgasjob) ? "selected='selected'" : "" }} >
    {{ $oilgasjob->job_title }}
</option>

答案 1 :(得分:0)

CONTROLLER

public function edit($id)
    {

        $data['industryjob'] = IndustryJob::find($id);

        $data['oilgasjobs'] = DB::table('industry_job_oil_gas_job')->where('industry_job_id','=',$id)->lists('oil_gas_job_id');

        if(is_null($id))
        {
            return Redirect::to('/admin/industry-jobs')->with('message', 'This division job is not valid');
        }

        View::share('page_title', 'Edit Division Job');

        return View::make('admin/industry-jobs/edit', $data);

    }

查看

<select name="oilgasjobs[]" id="oilgasjobs[]" size="6" class="form-control" multiple>
      @foreach(OilGasJob::orderBy('job_title', 'ASC')->get() as $oilgasjob)
       <?php
        $selected = "";
            if(in_array($oilgasjob->id, $oilgasjobs)) 
            $selected = "selected";         
       ?>
      <option value="{{ $oilgasjob->id }}" <?php echo $selected; ?>>{{ $oilgasjob->job_title }}</option>
      @endforeach
</select>