Laravel - 将表列值转换为slug

时间:2018-05-28 07:02:36

标签: php laravel eloquent slug accessor

我想将列值转换为带有 str_slug 的slug,以便在where子句中使用。我听说 Mutators & 访问者,我也听说他们不能用来查询表。

此处已将名称转换为slug中的slug,我想将 name 字段与控制器中的slug匹配

模型

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

表格

| ID | name    | price
| 1  |  ST SD  | 7
| 2  |  CA WA  | 4

刀片

<a href="{{ route('buy', str_slug($item->name)]) }}">Buy Now</a>

控制器

public function buy($name){
  $item = Name::where('name' => $name)->first();
  }

在控制器中,我想将名称字段转换为slug以匹配$ item-&gt;名称在刀片中的标记值

3 个答案:

答案 0 :(得分:0)

您必须在slugs旁边添加一个唯一的数字。

public function createSlug($title)
{
    // Normalize the title
    $slug = str_slug($title);
    if (Name::where('name' => $slug)->count() <= 0){
        return $slug;
    }
    $i =1; 
    while (Name::where('name' => $slug)->count() > 0) {
        $slug = $slug.'-'.$i;
        if (Name::where('name' => $slug)->count() <= 0) {
            return $slug;
        }
        $i++;
    }
    throw new \Exception('Can not create a unique slug.');           
}

答案 1 :(得分:0)

这是我用于我的slugs的代码。只需将其放在模型中,并在创建模型的新实例时调用该函数。

 public static function generateUniqueSlug($value){
    $temp = str_slug($value, '-');
    if(!Deck::all()->where('slug',$temp)->isEmpty()){
        $i = 1;
        $newslug = $temp . '-' . $i;
        while(!Deck::all()->where('slug',$newslug)->isEmpty()){
            $i++;
            $newslug = $temp . '-' . $i;
        }
        $temp =  $newslug;
    }
    return $temp;
}

就这样使用它:

$p = new Post();
$p->title = $request->title;
$p->slug = $p->genereateUniqueSlug($request->title);
$p->save();

答案 2 :(得分:0)

使用启动方法检查我的产品型号代码。我已经在我的有用产品模型上实现了它

avored ecommerce product model file