在保存模型时,出现错误,即slug属性没有默认值。 我创建了一个setSlugAttribute变异器,但它再次给了我错误。
//Controller save method inside
* * *
Task::create($request->all());
* * *
//Task model
public function setSlugAttribute(){
$this->attributes['slug'] = Str::slug($this->title, '-');
}
我该如何解决?它确实通过使用watch(saving)进行修复,不是吗?另一个主意吗?
我已经创建了TaskObserver,并在ServiceProvider中设置了它。
在观察器中,updated(Task $ task)和updated(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");
}
答案 0 :(得分:1)
我通过以下操作解决了这个问题:
//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']));
答案 1 :(得分:-1)
因此,每次创建或更新Task
时,您都希望从slug
列中自动填充title
列。
访问器对此不利。您想要的是观察员。对于观察者,您有两种选择:基于闭包或基于类。考虑到您的用例不太复杂,我选择基于闭包的观察器。
在首次创建模型和更新模型时,需要两个事件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, '-');
});
}
}
这应该可以解决问题。