繁体   English   中英

有很多通过更新/与枢轴laravel 5.5

[英]Has many through update / with pivot laravel 5.5

我有几个表(所有表都带有created_at,updated_at,deleted_at):

  • 部门
  • lang_sector
  • 价值链
  • lang_valuechain
  • lang_segment
  • 关键需求
  • keyneed_lang

表按此顺序链接:部门具有许多价值链价值链具有许多细分市场细分市场具有许多关键需求

这是我的模型:

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Sector extends Model
{
    use SoftDeletes;

    protected $table = "sectors";
    protected $fillable = ['admin_id'];
    protected $dates = [ 'created_at', 'updated_at', 'deleted_at' ];

    public function langs() {
        return $this->belongsToMany('App\Lang')
            ->withPivot('sectname', 'sectshortname', 'segname_slug',
                'sectdescription', 'sectshortdescription'
            )
            ->withTimestamps();
    }
    public function admin()
    {
        return $this->belongsTo('App\Admin');
    }

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

    $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');
}

我的问题是,它不会更新以下表:段和键需求(它们具有created_at,updated_at和Deleted_at字段)以及它们的数据透视表……而且我有一条错误消息:

SQLSTATE [23000]:完整性约束违规:1052字段: '的updated_at'在字段列表是不明确的(SQL:更新segments内连接valuechainsvaluechainsid = segmentsvaluechain_idsegmentsdeleted_at = 2018年5月10日6点54: 54, updated_at = 2018年5月10日六时54分54秒,其中valuechainssector_id = 2)

它添加了: updated_at

我成功更新了:

  • 部门表
  • 价值链表
  • lang_valuechain枢纽

我的问题是要更新

  • 通过使用$ sector-> segments()细分表
  • 使用以下命令来生成keyneeds表:$ sector-> keyneeds()

还有他们的数据透视表...我阅读了文档,但无济于事。 我使用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é');
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM