【问题标题】:doesn't have a default value error with set mutator And update observer does not workingset mutator 没有默认值错误并且更新观察者不起作用
【发布时间】:2020-09-26 10:45:27
【问题描述】:

在保存模型时,我有一个错误,即 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) 和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");
}

【问题讨论】:

  • 能否分享一下产生错误的代码,以及实际的错误?
  • @CanVural 现在可以控制了吗?
  • 您在构建器而不是模型本身上调用update,您正在对数据库进行直接UPDATE 查询,它不涉及模型,因此没有事件

标签: php laravel eloquent mutators


【解决方案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']));

【讨论】:

    【解决方案2】:

    因此,每次创建或更新 Task 时,您都希望从 title 列自动填充 slug 列。

    访问器不适合这个。你想要的是观察者。对于观察者,您有两个选择:基于闭包或基于类。考虑到您的用例不太复杂,我会选择基于闭包的观察者。

    您需要两个事件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, '-');
            });
        }
    }
    

    这应该可以解决问题。

    【讨论】:

    • 它没有解决我的问题。这不是一个合适的答案
    猜你喜欢
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2016-11-21
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    相关资源
    最近更新 更多