Php 通过pivot laravel 5.5进行更新/升级,有很多功能

Php 通过pivot laravel 5.5进行更新/升级,有很多功能,php,eloquent,laravel-5.5,Php,Eloquent,Laravel 5.5,我有几个表(都有创建的、更新的、删除的): 部门 朗欧区 价值链 lang_价值链 分段 lang_段 关键需求 克尤朗 这些表按以下顺序链接: 部门有许多价值链 价值链有许多部分 细分市场有许多关键需求 这是我的模型: 在我的销毁控制器中: public function destroy($id) { $sector = Sector::findOrFail($id); $sector_ids = $sector->langs()->allRelatedId

我有几个表(都有创建的、更新的、删除的):

  • 部门
  • 朗欧区
  • 价值链
  • lang_价值链
  • 分段
  • lang_段
  • 关键需求
  • 克尤朗
这些表按以下顺序链接: 部门有许多价值链 价值链有许多部分 细分市场有许多关键需求

这是我的模型:

在我的销毁控制器中:

public function destroy($id)
{
    $sector = Sector::findOrFail($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() ] );
    $sector->segments()->update( [ 'segments.deleted_at' => Carbon::now() ] );
    $sector->keyneeds()->update( [ 'keyneeds.deleted_at' => Carbon::now() ] );
    Sector::where('id', $id)->delete();

    return redirect()->route('sectors.index')->with('success', 'Sector deleted');
}
我的问题是它不会更新以下表格:segments和keyneeds(它们创建了\u at、更新了\u at和删除了\u at字段)以及它们的透视表。。。我有一条错误信息:

SQLSTATE[23000]:完整性约束冲突:1052字段列表中的“updated_at”不明确(SQL:update
segments
Internal join
valuechains
on
valuechains
idvaluechain\U idset
segments
删除时间为2018-05-10 06:54,
更新时间为2018-05-10 06:54:54,其中
valuechains
id

它增加了:
updated\u at

我成功更新:

  • 扇区表
  • 价值链表
  • lang_价值链支点
我的问题是更新

  • 使用:$sector->segments()创建段表
  • 使用:$sector->keydeeds()创建keydeeds表
还有他们的pivot表……我阅读了文档,但没有帮助。
我之所以使用update()方法,是因为$sector->segments()->delete()试图进行硬删除…

我终于发现了一个问题。不是很优雅,但它在“主”表上工作。我必须解决透视表上的小问题:

public function destroy($id)
{
    $sector = Sector::findOrFail($id);
    $valuechains = Valuechain::where('sector_id','=',$sector->id)->get();
    foreach ($valuechains as $valuechain) {
        $segments = Segment::where('valuechain_id', '=', $valuechain->id )->get();
        $valuechain->langs()->updateExistingPivot($valuechain->id, ['lang_valuechain.deleted_at' => Carbon::now()]);

        foreach ($segments as $segment) {
            $keyneeds = Keyneed::where('segment_id', '=', $segment->id)->get();
            $segment->langs()->updateExistingPivot($segment->id, ['lang_segment.deleted_at' => Carbon::now()]);
            $segment->delete();

            foreach ($keyneeds as $keyneed) {
                $keyneed->langs()->updateExistingPivot($keyneed->id, ['keyneed_lang.deleted_at' => Carbon::now()]);
                $keyneed->delete();
            }
        }
        $valuechain->delete();
    }
    $sector->langs()->updateExistingPivot($id, ['lang_sector.deleted_at' => Carbon::now()]);
    $sector->delete();

    return redirect()->route('sectors.index')->with('success', 'Secteur suppprimé');
}

为什么它试图进行硬删除?您是否在
模型中实现了软删除?或者通常所有要软删除的模型?我只是忘记了对我使用的所有模型进行软删除…是的,这就是我的想法:-)
public function destroy($id)
{
    $sector = Sector::findOrFail($id);
    $valuechains = Valuechain::where('sector_id','=',$sector->id)->get();
    foreach ($valuechains as $valuechain) {
        $segments = Segment::where('valuechain_id', '=', $valuechain->id )->get();
        $valuechain->langs()->updateExistingPivot($valuechain->id, ['lang_valuechain.deleted_at' => Carbon::now()]);

        foreach ($segments as $segment) {
            $keyneeds = Keyneed::where('segment_id', '=', $segment->id)->get();
            $segment->langs()->updateExistingPivot($segment->id, ['lang_segment.deleted_at' => Carbon::now()]);
            $segment->delete();

            foreach ($keyneeds as $keyneed) {
                $keyneed->langs()->updateExistingPivot($keyneed->id, ['keyneed_lang.deleted_at' => Carbon::now()]);
                $keyneed->delete();
            }
        }
        $valuechain->delete();
    }
    $sector->langs()->updateExistingPivot($id, ['lang_sector.deleted_at' => Carbon::now()]);
    $sector->delete();

    return redirect()->route('sectors.index')->with('success', 'Secteur suppprimé');
}