Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Laravel多对多关系中,是否有方法更新数据透视表中的数据?_Laravel_Eloquent_Many To Many - Fatal编程技术网

在Laravel多对多关系中,是否有方法更新数据透视表中的数据?

在Laravel多对多关系中,是否有方法更新数据透视表中的数据?,laravel,eloquent,many-to-many,Laravel,Eloquent,Many To Many,我建立了两个模型:用户模型和机构模型。 在添加其他透视列后,如何更新它们之间的透视数据 <?php class User extends Authenticatable { public function institutions() { $pivots = ['id', 'program_choice', 'session']; return $this->belongsToMany('App\Institution')

我建立了两个模型:用户模型和机构模型。 在添加其他透视列后,如何更新它们之间的透视数据

<?php

class User extends Authenticatable
{
    public function institutions()
    {
        $pivots = ['id', 'program_choice', 'session'];
        return $this->belongsToMany('App\Institution')
            ->withPivot($pivots);
    }
}


class Institution extends Authenticatable
{

    public function users()
    {
        $pivots = ['id', 'program_choice', 'session'];
        return $this->belongsToMany('App\User', 'institution_user')
            ->withPivot($pivots);;
    }
}
这就是透视表的外观

我能够将信息附加到数据透视表

public function storeInstitution(Request $request)
    {
        $user_id = auth()->user()->id;
        $user = User::find($user_id);
        $institution_id = $request->input('institution_id');
        $user_program_choice = $request->input('program_choice');
        $user_session = $request->input('session');
        $user_inst =   array(
            'program_choice' => $user_program_choice,
            'session'        => $user_session,
            'user_id'        => $user_id,
            'institution_id' => $institution_id
        );
        $user->institutions()->attach($institution_id, $user_inst);
        return 'success';
    }
但无法更新附加的轴,例如,我无法将程序选项,
粒子物理
更改为类似于
数字艺术

这是我目前的密码

 public function updateInstitutions(Request $request, $pivot_id)#TODO id is pivot_id
    { 
        $user_id = auth()->user()->id;
        $user = User::find($user_id);
        $institution_id = $request->input('institution_id');
        $pivot_attributes =   array(
            'user_id'        => $user_id,
            'institution_id' => $institution_id,
            'session'        => $request->input('session'),
            'program_choice' => $request->input('program_choice'),
        );

        $user->institutions()->updateExistingPivots($institution_id, $pivot_attributes, false);
        return 'success';

    }
如何使用pivot id更新我的pivot数据?

检查有关此方面的信息

更新数据透视表上的记录 如果需要更新透视表中的现有行,可以使用
updateExistingPivot
方法。此方法接受透视记录 外键和要更新的属性数组:

$user = App\Models\User::find(1);

$user->roles()->updateExistingPivot($roleId, $attributes);

枢轴有一个主键。有没有办法使用主键而不是外键来更新?@jay4592您可以创建一个pivot模型,然后直接从那里查询行。请看是否有一本书、视频或文章广泛介绍Pivot模型?它是否与普通模型具有相同的行为?我可以为它创建控制器吗?我可以使用save()方法吗?@jay4592
Pivot
类扩展了
Model
one(请参阅),所以是的。。同样的行为,谢谢。我只需要知道这些。这让人放心。
$user = App\Models\User::find(1);

$user->roles()->updateExistingPivot($roleId, $attributes);