Хорошо, поэтому я собираюсь сделать здесь некоторые предположения, но допустим, у вас есть эта функция в вашей модели Design:
Design. php
class Design extends Model
{
...
/**
* Assuming you dont have a slug column on your designs table
*
* Also assuming the slug is built from a column called 'name' on
* your designs table
*/
public function getSlugAttribute()
{
return \Illuminate\Support\Str::slug($this->name);
}
// This assumes there is a column on posts table of 'design_id'
public function posts()
return $this->hasMany(Post::class);
}
...
}
Теперь давайте сделаем пример того, как вы можете построить желаемый маршрут.
РЕДАКТИРОВАТЬ
В ходе дальнейших обсуждений с спрашивающим они не будут показывать все сообщения, связанные с дизайном, который они отображаются (см. модель выше). Настройка в этом ответе подходит для этого, и вы можете обратиться к методу show, определенному ниже. Предположим, у нас есть DesignsController.php
:
class DesignsController extends Controller
{
...
public function index()
{
return view('designs.index', [
'designs' => Design::all(),
]);
}
public function show(Request $request, string $design)
{
// It is worth noting here if name has a double space you wont
// be able to build backwards to it for a query
// ie) Design\s\sOne !== $lower(Design\sOne)\
$spaced = str_replace('-', ' ', $design);
$lower = strtolower($spaced);
$design = Design::with('posts')->whereRaw("LOWER(name) = '$lower'")->first();
return view('designs.show', [
'design' => $design,
]);
}
...
}
Теперь в файле 'designs / index.blade. php' вы можете сделать что-то вроде:
@foreach($designs as $design)
<a href="{{ route('designs.show', [ 'design' => $design->slug ]) }}">{{ $design->name }}</a>
@endforeach
Это перечислит все ваших дизайнов по имени, связанных с маршрутом designs.show их слагом.
Если вы всегда хотите, чтобы значение слага загружалось при сериализации в массив или json, вы можете добавить его в защищенный массив $ appends модели.
Если вы не ВСЕГДА хотите, чтобы он добавлялся, вам нужно добавить его во время выполнения, например, $design->append('slug')
.
Или, если у вас есть коллекция дизайнов, вы можете сделать $designs->each->append('slug')
.
Теперь в вашем файле клинка designs.show вы можете получить доступ к сообщениям дизайна, используя отношение, которое мы загрузили с помощью Design :: with ('posts '), выполнив следующие действия:
@foreach ($design->posts as $post)
<img src="{{ asset('storage/'.$post->postImage) }}">
@endforeach