用Laravel / Eloquent填充数据透视表

时间:2019-02-20 00:40:36

标签: laravel eloquent backpack-for-laravel

我有8个表格:产品,有害生物,活性成分,农作物,active_product,有害生物产品,crop_product和active_pest

我已经构建了一个表格,该表格可以加载有关所选(农业化学)产品的信息-在该表格中,用户可以选择与该产品相关的害虫,活性物质和农作物。提交后,我现有的代码将预期的信息保存在产品表中,并且通过一组“ belongsToMany”关系,还可以正确更新active_product,害虫_产品和crop_product数据透视表。

我的问题是我不知道如何使用活性成分和有害生物信息(即它们各自的ID值)来添加/更新active_pest表。

我希望能有所指路。

我的模型中的方法如下:

产品

public function Actives()
{
  return $this->hasMany('App\Models\Active','active_product', 'product_id', 'active_id');
}
public function pest()
{
  return $this->belongsToMany('App\Models\Pest','pest_product', 'product_id', 'pest_id');
}
public function active()
{
  return $this->belongsToMany('App\Models\Active','active_product', 'product_id', 'active_id');
}

活动

public function product()
{
  return $this->belongsToMany('App\Models\Product', 'active_product', 'active_id', 'product_id');
}

public function pest()
{
  return $this->belongsToMany('App\Models\Pest', 'active_pest', 'active_id', 'pest_id');
}

害虫

public function active()
{
  return $this->belongsToMany('App\Models\Active', 'active_pest', 'pest_id', 'active_id');
}
public function product()
{
  return $this->belongsToMany('App\Models\Product','pest_product', 'pest_id', 'product_id');
}
public function crop()
{
  return $this->belongsToMany('App\Models\Crop','crop_pest', 'pest_id', 'crop_id');
}

我正在使用BackPack for Laravel-我的产品控制器包含此更新功能:

public function update(UpdateRequest $request)
{    
    $redirect_location = parent::updateCrud($request);
    return $redirect_location;
}

updateCrud是

public function updateCrud(UpdateRequest $request = null)
{
    $this->crud->hasAccessOrFail('update');
    $this->crud->setOperation('update');

    // fallback to global request instance
    if (is_null($request)) {
        $request = \Request::instance();
    }

    // update the row in the db
    $item = $this->crud->update($request->get($this->crud->model->getKeyName()),
                        $request->except('save_action', '_token', '_method', 'current_tab', 'http_referrer'));
    $this->data['entry'] = $this->crud->entry = $item;

    // show a success message
    \Alert::success(trans('backpack::crud.update_success'))->flash();

    // save the redirect choice for next time
    $this->setSaveAction();

    return $this->performSaveAction($item->getKey());
}

谢谢汤姆

1 个答案:

答案 0 :(得分:1)

您可以使用laravel的attach方法,如下所示:

$actives = App\Active::create([
    'someColumn' => 'test',
    'anotherColumn' => 'test',
]);

$pests = App\Pest::create([
    'someColumn' => 'test',
    'anotherColumn' => 'test',
]);

$actives->pest()->attach($pests);
          ^^^-relation name in model