php – Laravel在保存前生成slu ..

前端之家收集整理的这篇文章主要介绍了php – Laravel在保存前生成slu ..前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在 this wondefull website的帮助下学习laravel 5.
对于我的活动模型,我想在将一个保存到我的数据库之前生成slug,因此我创建了以下模型.
<?PHP namespace App;

use Illuminate\Database\Eloquent\Model;

class Activity extends Model {

    protected $table = 'activitys';

    protected $fillable = [
        'title','text','subtitle'
    ];

    // Here I want to auto generate slug based on the title
    public function setSlugAttribute(){
        $this->attributes['slug'] = str_slug($this->title,"-");
    }
    //    
}

但是当我在活动模型slug的帮助下保存一个对象时,我没有填充,我尝试将其更改为$this-> attributes [‘title’] =“test”进行测试,但它没有运行.另外我尝试将参数$title,$slug添加到setSlugAttribute()但它没有帮助.

我做错了什么,有人可以解释setSomeAttribute($whyParameterHere)的一些示例中使用的参数.

注意:我的数据库中有一个slug字段.

正如user3158900所建议的,我尝试过:

public function setTitleAttribute($title){
    $this->title = $title;
    $this->attributes['slug'] = str_slug($this->title,"-");
}
//

这使我的标题字段为空,但以我想要的方式保存了slug,为什么$this->标题为空?
如果我删除$this-> title = $title;标题和slug都是空的

我相信这不起作用,因为你没有尝试设置一个slug属性,所以函数永远不会被击中.

我建议在你的setTitleAttribute()函数中设置$this-> attributes [‘slug’] = …,这样每当你设置一个标题时它就会运行.

否则,另一种解决方案是为您的模型创建一个保存事件,并将其设置在那里.

编辑:根据评论,还有必要在这个函数中实际设置title属性

public function setTitleAttribute($value)
{
    $this->attributes['title'] = $value;
    $this->attributes['slug'] = str_slug($value);
}

猜你在找的Laravel相关文章