Laravel 4更新slug

时间:2014-10-31 08:29:52

标签: php laravel laravel-4 eloquent

我有它,所以当创建一个新分支时,名称会变成一个slug进行查找,但是当我更新记录时,slug变量保持不变,有没有办法让它在记录时自动更新改变?

class Branch extends \Eloquent {

    public static $rules = [
        'name' => 'required'
    ];

    protected $fillable = ['name', 'slug'];

    protected function setNameAttribute($name)
    {
        $this->attributes['name'] = $name;
        $this->attributes['slug'] = Str::slug($name);
    }
}

并在我的控制器中......

public function update($slug)
{
    $branch = Branch::whereSlug($slug);

    $validator = Validator::make($data = Input::except('_method', '_token'), Branch::$rules);

    if ($validator->fails())
    {
        return Redirect::back()->withErrors($validator)->withInput();
    }

    $branch->update($data);

    return Redirect::route('branches.index');
}

1 个答案:

答案 0 :(得分:2)

首先,模型事件应该启动到mutator ,如果它是你正在处理的Eloquent模型 - Fluent查询构建器不会。我认为 Branch::whereSlug($slug)返回Fluent查询构建器 - 只需检查Branch::whereSlug($slug)->firstOrFail()是否有效。我想它可能会。


如果不这样做,我建议有两个选项 - 首先,Colin Viebrock有一个非常好用的package for generating slugs非常好。

如果您宁愿自制,我只需使用model event将其放入boot方法:

public static function boot() {
    static::saving( function( $model ) {
        $model->name = $model->name; // force the slug to be rebuilt
    } );
}