我在控制器中创建了一个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
设置valuechains
。deleted_at
=' 2018-05-09 16:10:32',valuechains
。{{1} } =' 2018-05-09 16:10:32',updated_at
=' 2018-05-09 16:10:32'其中updated_at
。valuechains
=' 2'和sector_id
。valuechains
不为空
updated_at出现没有任何特殊原因......
答案 0 :(得分:1)
这种情况正在发生,因为您明确要求在此行中设置updated_at
列:
'valuechains.updated_at' => Carbon::now()
Laravel会在UPDATE期间自动设置updated_at
,因此您无需自行明确更新。
您应该能够删除该显式行,updated_at
仍会更新。
Laravel 应该足够智能,以检测重复的列更新,不管是不是。