如何在laravel中更新从N到N关系创建的表的外键?

时间:2014-07-02 22:44:47

标签: php mysql laravel laravel-4

如果将技术(Servicio)的服务(Tecnico)更改为其他技术,则会发生什么。我需要更新表调用Servicio_Tecnico中的更改。我不怎么做

Tecnico模型

class Tecnico extends Eloquent{
protected $table = 'Tecnico';
protected $primaryKey = 'idTecnico';
protected $hidden = array('Contrasena');
protected $fillable = array(
                            'idTecnico',
                            'Nombre',
                            'Apellido',
                            'Telefono',
                            'Contrasena',
                            'Foto',
                            );
public function servicios(){
    return $this->belongsToMany('Servicio', 'Servicio_Tecnico', 'Tecnico_idTecnico', 'Servicio_idServicio');
}
}

Servicio模型

class Servicio extends Eloquent{
protected $table = 'Servicio';
protected $primaryKey = 'idServicio';
protected $fillable = array(
                            'Direccion',
                            'RutaPDF',
                            'Completado',
                            'TipoUsuario',
                            'Zonal',
                            'RutaCliente',
                            'Prima'
                            );
public function tecnicos(){
    return $this->belongsToMany('Tecnico', 'Servicio_Tecnico', 'Servicio_idServicio', 'Tecnico_idTecnico');
}
public function materialUsado(){
    return $this->hasMany('MaterialUsado', 'Servicio_idServicio');
}
}

当我尝试更改

时,这是我的代码
    $idTecnico_old = Input::get('idTecnicoViejo');
    $idTecnico_new = Input::get('idTecnico');
    $idServicio = Input::get('idServicio');
    if($idTecnico_new != ''){

        $servicio = Servicio::find($idServicio);
        $tecnico = $servicio->tecnicos()->get();
        $tecnico = $tecnico->find($idTecnico_old);
        $tecnico->pivot->Tecnico_idTecnico = $idTecnico_new;
        $tecnico->pivot->save;

    }

请帮助

1 个答案:

答案 0 :(得分:0)

您希望对数据透视表使用sync而不是save。

$servicio = Servicio::find($idServicio);
$servicio->tecnicos()->sync(array('Tecnico_idTecnico' => $idTecnico_new));    
$servicio->update();