重复" deleted_at"使用Laravel 5.5进行sql更新请求

时间:2018-05-09 16:17:18

标签: eloquent laravel-5.5

我在控制器中创建了一个destroy方法:

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(), 'lang_sector.updated_at' => Carbon::now()]);
    }
    $sector->valuechains()->update(
        [
            'valuechains.deleted_at' => Carbon::now(),
            'valuechains.updated_at' => Carbon::now()
        ]
    );

    Sector::where('id', $id)->delete();
}

在我的模特中:

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',
            'sectdescription',
            'sectshortdescription'
        )
        ->withTimestamps();
}

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

当我销毁我的条目时,我遇到了sql请求的问题:

更新valuechains设置valuechainsdeleted_at =' 2018-05-09 16:10:3​​2',valuechains。{{1} } =' 2018-05-09 16:10:3​​2',updated_at =' 2018-05-09 16:10:3​​2'其中updated_atvaluechains =' 2'和sector_idvaluechains不为空

updated_at出现没有任何特殊原因......

1 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为您明确要求在此行中设置updated_at列:

'valuechains.updated_at' => Carbon::now()

Laravel会在UPDATE期间自动设置updated_at,因此您无需自行明确更新。

您应该能够删除该显式行,updated_at仍会更新。

Laravel 应该足够智能,以检测重复的列更新,不管是不是。