set mutator 没有默认值错误并且更新观察者不起作用
doesn't have a default value error with set mutator And update observer does not working
在保存模型时,出现一个错误,即 slug 属性没有默认值。
我已经创建了一个 setSlugAttribute 修改器,但它再次给了我错误。
//Controller save method inside
* * *
Task::create($request->all());
* * *
//Task model
public function setSlugAttribute(){
$this->attributes['slug'] = Str::slug($this->title, '-');
}
我该如何解决?它确实通过使用观察(保存)来修复,不是吗?另一个想法?
我创建了一个 TaskObserver 并在 ServiceProvider 中设置它。
在观察者中,updated(Task $task) 和 updating(Task $task) 方法不起作用!
但是创建的方法有效。
//Update method inside:
$array = $request->all(['title', 'description', 'deadline', 'budget','guest_token']);
$task = Task::where('id',$request->id)->update($array);
//I am waiting working of udate observer but it don't
//TaskObserver
public function updating(Task $task)
{
dd("updating");
}
public function updated(Task $task)
{
dd("updated");
}
因此,每次创建或更新 Task
时,您都希望 slug
列成为 title
列的 auto-populated。
访问器对此不利。你想要的是观察者。对于观察者,您有两种选择:基于闭包或基于 class。考虑到您的用例不是太复杂,我会选择基于闭包的观察者。
您需要两个事件 creating
和 saving
来处理模型首次创建时和模型更新时的事件。所以你的任务模型应该是这样的:
<?php
class Task extends Model
{
protected static function creating()
{
static::creating(function ($task) {
$task->slug = Str::slug($task->title, '-');
});
static::saving(function ($task) {
$task->slug = Str::slug($task->title, '-');
});
}
}
这应该可以解决问题。
我已经通过执行以下操作解决了这个问题:
//when I assigned it to a variable and then calling update method, it worked
$task = Task::where('id',$request->id)->first();
$update = $task->update($request->all(['title', 'description', 'deadline', 'budget','guest_token']));
在保存模型时,出现一个错误,即 slug 属性没有默认值。 我已经创建了一个 setSlugAttribute 修改器,但它再次给了我错误。
//Controller save method inside
* * *
Task::create($request->all());
* * *
//Task model
public function setSlugAttribute(){
$this->attributes['slug'] = Str::slug($this->title, '-');
}
我该如何解决?它确实通过使用观察(保存)来修复,不是吗?另一个想法?
我创建了一个 TaskObserver 并在 ServiceProvider 中设置它。
在观察者中,updated(Task $task) 和 updating(Task $task) 方法不起作用! 但是创建的方法有效。
//Update method inside:
$array = $request->all(['title', 'description', 'deadline', 'budget','guest_token']);
$task = Task::where('id',$request->id)->update($array);
//I am waiting working of udate observer but it don't
//TaskObserver
public function updating(Task $task)
{
dd("updating");
}
public function updated(Task $task)
{
dd("updated");
}
因此,每次创建或更新 Task
时,您都希望 slug
列成为 title
列的 auto-populated。
访问器对此不利。你想要的是观察者。对于观察者,您有两种选择:基于闭包或基于 class。考虑到您的用例不是太复杂,我会选择基于闭包的观察者。
您需要两个事件 creating
和 saving
来处理模型首次创建时和模型更新时的事件。所以你的任务模型应该是这样的:
<?php
class Task extends Model
{
protected static function creating()
{
static::creating(function ($task) {
$task->slug = Str::slug($task->title, '-');
});
static::saving(function ($task) {
$task->slug = Str::slug($task->title, '-');
});
}
}
这应该可以解决问题。
我已经通过执行以下操作解决了这个问题:
//when I assigned it to a variable and then calling update method, it worked
$task = Task::where('id',$request->id)->first();
$update = $task->update($request->all(['title', 'description', 'deadline', 'budget','guest_token']));