我需要在save()或update()之后或之前生成一个函数来调用,但我不知道该怎么做.我想我需要来自save()update()的回调,但我不知道该怎么办.谢谢
当为模型观察者使用单独的类时,我应该在哪里注册观察者?文档说要打电话,User::observe(new UserObserver);但我不知道最好的地方在哪里.
按照这个答案,我在Laravel中建模保存回调(类似于rails),如下所示:
class LessonPlan extends Eloquent {
public function save(array $options = array())
{
// before save code
parent::save();
// after save code
}
}
Run Code Online (Sandbox Code Playgroud)
但是,Page当我保存新页面或更新现有页面时,我会调用save().我怎么知道这个操作中哪个是哪个?
我试过类似的东西
public function save(array $options = array())
{
// before save code
$oldLesson = clone $this;
parent::save();
..
if ($this->isLessonStatusChanged($oldLesson)) {
..
}
}
private function isLessonStatusChanged($oldLesson) {
return $this->status != $oldLesson->status;
}
Run Code Online (Sandbox Code Playgroud)
但这并不好......因为$ oldLesson已经有了$ lesson的新值
我最后做的只是重新编写网址,看看它是否是一个更新请求..但我已经在晚上睡觉时遇到了问题(我的回答并没有真正告诉我是否有任何值实际发生了变化.. b/c one可以提交更新表格,而无需实际更改任何内容)..有更清洁的方法吗?
我想执行UPDATE使用滔滔不绝,将设置column_c的使用值值column_a和column_b同桌.基本上,这样的事情:
User::where('id', '>', 0)
->update(['column_c' => $this->column_a + $this->column_b]);
Run Code Online (Sandbox Code Playgroud)
where $this->column_a和$this->column_b 将是当前行的实际值.
MySQL等价物:
UPDATE `user` WHERE id > 0 SET column_c = column_a + column_b;
Run Code Online (Sandbox Code Playgroud)
注意:上面的代码只是展示这个想法的一个例子.这不是实际的实现(这将创建数据库冗余).
如何在Laravel 5.1中执行此类更新?我真的想避免一个foreach.
请帮助我了解如何在 Laravel 5.4 中执行此操作。不能谷歌这个。
CREATE TABLE t1 (
dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
Run Code Online (Sandbox Code Playgroud)
这不起作用:
$table->dateTime('dt')
->default(DB::raw('CURRENT_TIMESTAMP'))
->onUpdate(DB::raw('CURRENT_TIMESTAMP'));
Run Code Online (Sandbox Code Playgroud)
问题是关于这部分:
ON UPDATE CURRENT_TIMESTAMP
Run Code Online (Sandbox Code Playgroud)
解决了:
好吧,解决方案很简单:/
$table->dateTime('updated')
->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'))
Run Code Online (Sandbox Code Playgroud)