【问题标题】:Laravel: sync(); issueLaravel:同步();问题
【发布时间】:2017-08-28 14:25:23
【问题描述】:

我有这个Brands->Models->Versions 连锁汽车应用程序,版本有附件。我正在尝试在数据透视表上sync() 附件和版本,但出现此错误:

(1/1) BadMethodCallException
Call to undefined method Illuminate\Database\Query\Builder::sync()

这是附件(可选)模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Opcional extends Model
{
  public function versaos(){
    return $this->belongsToMany('App\Versao');
  }
}

这是版本模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Versao extends Model
 {
    public function modelos(){
        return $this->belongsTo('App\Modelo');
    }
    public function opcionals(){
    return $this->hasMany('App\Opcional');
}
}

HTML 部分:

<div class="col-md-6">
        <label>De Série</label>
        <select class="custom-select select-multi but-to-but" multiple="multiple" name="series[]">
            @foreach($opcionals as $opcional)
          <option value="{{ $opcional->id }}">{{ $opcional->descricao }}</option>
            @endforeach
          </select>
          <small id="textHelp" class="form-text text-muted">Comece a digitar</small>
      </div>

以及存储功能Controller:

...
$versao->save();
$versao->opcionals()->sync($request->opcionals, false);
...

错误告诉我数组没问题,传递值,我的意思是:

at Builder->__call('sync', array(array('77', '75', '76'), false))
in Builder.php (line 1254)

数据透视表架构是:

id, opcionals_id, versaos_id

【问题讨论】:

  • 同步是针对多对多,而不是一对多的关系。

标签: laravel synchronization


【解决方案1】:

您在 Versao::opcionals 上定义了一对多关系,因为您使用的是 hasMany,而不是 belongsToMany。

一对多关系没有同步方法。根据另一个模型,我会说您对这种关系的定义不正确。

【讨论】:

  • 太棒了!我让它过去了...在两个模型上更改为 belongsToMany 并且它工作得很好!
  • @Marcello Patto 你已经这样做了,非常感谢。让我们删除 cmets
猜你喜欢
  • 2017-03-16
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 2011-07-15
  • 2015-05-03
  • 2012-11-01
  • 2011-09-10
相关资源
最近更新 更多