Laravel — конвертировать значение столбца таблицы в слаг

Я хочу преобразовать значение столбца в слаг str_slug использовать в пункте, где. я слышал Мутаторы & Accessors, также я слышал, что они не могут быть использованы для запроса таблицы.

Здесь преобразовали имя в слизняк в клинке, и я хочу соответствовать name поле, чтобы убить в контроллере

модель

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, чтобы соответствовать значению slugged $ item-> name в blade-сервере.

1

Решение

Вы должны добавить уникальный номер рядом с слизнями.

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.');
}
0

Другие решения

Вот код, который я использую для своих слизней. Просто поместите его в вашу модель и вызовите функцию, когда вы создаете новый экземпляр модели.

 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();
0

Проверьте код модели моего продукта с помощью метода загрузки. Я реализовал это на моей любимой модели продукта

файл модели продукта электронной коммерции

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector