嗨,我想知道当数据库中的一个子节点更新时,如何始终为其设置正确的update_at日期。这就是我的处境:
Parent_table :
id : 1; updated_at: laraval_date
Child_table :
id:1;foreign_parent_id:1; updated_at: laraval_date
id:2;foreign_parent_id:1; updated_at: laraval_date
id:3;foreign_parent_id:1; updated_at: laraval_date
id:4;foreign_parent_id:1; updated_at: laraval_date
我希望在编辑其中一个子项时更改updated_at父项。例如,当对子项3进行某些编辑时。
Parent_table :
id : 1; updated_at: laraval_date
Child_table :
id:1;foreign_parent_id:1; updated_at: laraval_date
id:2;foreign_parent_id:1; updated_at: laraval_date
id:3;foreign_parent_id:1; updated_at: other_date <= some edit made
id:4;foreign_parent_id:1; updated_at: laraval_date
这将导致:
Parent_table :
id : 1; updated_at: other_date <= date is updated as well
Child_table :
id:1;foreign_parent_id:1; updated_at: laraval_date
id:2;foreign_parent_id:1; updated_at: laraval_date
id:3;foreign_parent_id:1; updated_at: other_date
id:4;foreign_parent_id:1; updated_at: laraval_date
添加新的子注释时也应该发生同样的情况。我的解决方案相当不切实际,而且很难维持,因为作为一个孩子,可以通过多种不同的方式进行编辑。
Child::where(something is true)->update(something);
Parent::where(something is true)->touch();
现在有人知道如何更优雅地解决这个问题吗。也许是用某种雄辩的钩子。提前谢谢。
您需要创建关系:https://laravel.com/docs/9.x/eloquent-relationships#touching-父时间戳
类似于:
class Child extends Model
{
protected $touches = ['parent'];
public function parent()
{
return $this->belongsTo(Parent::class, "foreign_parent_id");
}
}
那么更新Child
实例也会更新Parent