eloquent - 使用 laravel 和 Eloquent 对表和数据透视表进行级联更新
问题描述
我创建了一个名为扇区的模型。对于这个模型,我创建了在数据库表之间建立链接的方法:
- 一个行业有很多价值链,有很多细分市场,有很多关键需求
- 价值链有很多部分
- 一个细分市场有许多关键需求......
它是这样翻译的:
public function valuechains()
{
return $this->hasMany('App\Valuechain');
}
public function segments()
{
return $this->hasManyThrough('App\Segment', 'App\Valuechain');
}
public function keyneeds()
{
return $this->hasManyThrough('App\Keyneed', 'App\Segment', 'App\Valuechain');
}
当我软删除一个扇区时,我想在其他表上创建级联并进行更新。
我的销毁方法是:
public function destroy($id)
{
$sector = Sector::findOrFail($id);
// on update lang_sector pour chaque id
$sector_ids = $sector->langs()->allRelatedIds();
foreach ($sector_ids as $id){
$sector->langs()->updateExistingPivot($id, ['lang_sector.deleted_at' => Carbon::now()]);
}
$sector->valuechains()->update(
[
'valuechains.deleted_at' => Carbon::now(),
'valuechains.updated_at' => Carbon::now(),
]
);
$sector->segments()->update(
[
'segments.deleted_at' => Carbon::now(),
'segments.updated_at' => Carbon::now(),
]
);
$sector->keyneeds()->update(
[
'keyneeds.deleted_at' => Carbon::now(),
'keyneeds.updated_at' => Carbon::now()
]
);
Sector::where('id', $id)->delete();
return redirect()->route('sectors.index')->with('success', 'Sector deleted');
}
我有价值链、细分和关键需求的数据透视表,我还想更新这些表上的 updated_at 和 deleted_at 列......
对于这 3 个表,我在模型中添加了用于定义数据透视关系和定义数据透视表中的字段的 lang 方法:
public function langs() {
return $this->belongsToMany('App\Lang')
->withPivot(
'vcname',
'vcshortname',
'vcdescription',
'vcshortdescription',
'created_at',
'updated_at',
'deleted_at'
);
}
我有一条错误消息:
SQLSTATE [23000]:完整性约束违规:1052 冠军:'updated_at' dans field list est ambigu(SQL:更新segments
内部联接valuechains
在valuechains
. id
= segments
. valuechain_id
set valuechains
. deleted_at
=2018-05-09 07:34:30,valuechains
. updated_at
=2018-05- 09 07:34:30, segments
. deleted_at
= 2018-05-09 07:34:30, segments
. updated_at
= 2018-05-09 07:34:30, **updated_at**
= 2018-05-09 07:34:30 其中valuechains
. sector_id
= 2)