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。考虑到您的用例不是太复杂,我会选择基于闭包的观察者。

您需要两个事件 creatingsaving 来处理模型首次创建时和模型更新时的事件。所以你的任务模型应该是这样的:

<?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']));