我有它,所以当创建一个新分支时,名称会变成一个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');
}
答案 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
} );
}