我试图在
this wondefull website的帮助下学习laravel 5.
对于我的活动模型,我想在将一个保存到我的数据库之前生成slug,因此我创建了以下模型.
对于我的活动模型,我想在将一个保存到我的数据库之前生成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); }