Я использую Laravel 4 и пытаюсь заставить панель URL-адресов отображать текстовый URL-адрес, сохраненный в базе данных, вместо использования идентификатора.
Это мои маршруты.php
Route::get('/{id}', function($id = 1){
if(is_numeric($id))
{
$page = Menu::find($id);
$action = 'content';
return App::make('HomeController')->$action($id);
} else {
$column = 'url';
$url = Seo::where($column, '=', $id)->get();
$action = 'show';
return App::make('HomeController')->$action($url[0]->id);
}
});
Я также использую сводную таблицу, чтобы связать меню с SEO.
Сео модель
<?php
class Seo extends \Eloquent {
protected $fillable = array('url', 'meta_title', 'meta_description', 'keywords');
protected $guarded = array('id');
protected $table = 'seo';
public static $rules = array(
'title' => '',
'content' => '',
'image' => ''
);
public function menu(){
return $this->belongsToMany('Menu', 'menu_seo', 'seo_id', 'menu_id');
}
}
Модель меню
<?php
class Menu extends \Eloquent {
protected $fillable = array('title', 'menu_id', 'image');
protected $guarded = array('id');
protected $table = 'menus';
public static $rules = array(
);
public function seo(){
return $this->belongsToMany('Seo', 'menu_seo', 'menu_id', 'seo_id');
}
}
HomeКонтроллер
public function content($id)
{
$menus_child = Menu::where('menu_id', 0)->with('menusP')->get();
$menu = Menu::where('id', $id)->firstOrFail();
//dd($menu->frames);
return View::make('index', compact('menus_child'))->with('menu', $menu);
}
а затем я вызываю свои представления, которые ссылаются на меню, подобное этому
@foreach($menu->banner as $banners)
{{ $banners->title }}
@endforeach
No query results for model [Menu].
Я думаю, это должно означать, что в базе данных ничего нет, но это неправильно, потому что в базе данных есть данные 29.03.2015id
, вы не можете использоватьfind($id)
, если не укажете первичный ключ в своей модели. Может в этом проблема... 29.03.2015$page = Menu::where('id', $id)->first(); foreach($page->seo as $seo){ $url = $seo->url; }
Это дает правильный URL-адрес, но я получаю эту ошибку. 29.03.2015content
? Поскольку эта ошибка обычно возникает только изfirstOrFail
29.03.2015content()
? 30.03.2015