Задать вопрос

Laravel. Как изменить primaryKey в запросе в модель?

Есть таблица pages

BUtJPuU.png

Есть класс Page

<?php
class Page extends Eloquent 
{

}


Есть роут для отображения страницы по id

Route::model('page', 'Page');
Route::get('/pagebyid/{page}', function(Page $page)
{
	print_r($page);
});


Все работает. Но как теперь заставить работать другой роут достающий страницу по урлу?

Route::model('url', 'Page');
Route::get('/pagebyurl/{url}', function(Page $url)
{
	print_r($url);
});


Выборка все равно идет по id.

По идее можно изменить primaryKey в Page
protected $primaryKey = 'url';

Но тогда перестанет работать роут /pagebyid/1

Еще можно в роуте ручками подкорректировать запрос
Route::get('/pagebyurl/{url}', function($url) 
{
  $page = Page::where('url', $url)->get();
  print_r($page);
});


Но тут мы уже собираем запрос через where, а хочется все сделать через умное Route::model()

Собственно вопрос. Как в данном случае получить страницу по полю url?
  • Вопрос задан
  • 2425 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
Определение роутов посредством Route::model() хорошо использовать, когда у Вас полностью CRUD приложение. Скажем, если достаточно простое API к чему-то или ресурс заточен на работу с данными типа справочников. В ином случае крайне рекомендую делать разбиение роутов. Так как всегда можно будет найти нужный роут и поправить его (дебаггинг/поддержка не будет такой головной болью), всегда видно и можно управлять типами запросов (упростится работа по развитию кода) ну и если внесутся какие-либо изменения в этот метод, то не будет проблемы с переделыванием кода (упростится и улучшится совместимость). Плюс, если Вы вынесите логику в отдельный слой приложения, его так же будет проще развивать и поддерживать...

Всё это относится и к Route::controller().
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы