在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);