我在laravel中有以下路线。
Route::get('/{id}', 'HomeController@profile')->where('id', '[0-9A-Za-z\-]+');
如果id
对应于数据库中的id,例如site.com/23
,那么我可以从具有该特定ID的数据库中获取结果。但是,如果我想获取像标题slu :: site.com/this-is-title
这样的东西,那么它根本不会起作用。我不知道如何告诉laravel根据数据库id
以外的任何内容进行查询。
我的控制器是:
class HomeController extends BaseController{
public function profile($company_slug){
$result = Clients::all($company_slug);
return View::make("home.profiles", compact("result"));
}
}
这是我的模板。
@extends("layouts.master")
@section("main-content")
<?php
{{ $result->company_slug }}
?>
@stop
没有输出。如果我<?php var_dump($result) ?>
,我会NULL
。
但正如我所说,如果我传递了一个id site.com/32
,那么我会从数据库a获得该id的结果。
答案 0 :(得分:3)
您可以使用路线模型:
解决方案1:
Route::bind('profiles', function($value)
{
$records = Profiles::where('company_slug', $value)->all();
if ( ! $records->count())
{
App::abort(404);
}
else
{
return $records;
}
});
Route::get('{profiles}', 'HomeController@profile');
class HomeController extends BaseController
{
public function profile($profiles)
{
return View::make("home.profiles")->with('profiles', $profiles);
}
}
解决方案2:
Route::get('{slug}', 'HomeController@profile');
class HomeController extends BaseController
{
public function profile($slug)
{
return View::make("home.profiles")
->with('profiles', Profiles::where('company_slug', $slug)->all());
}
}
Docu可用here。
答案 1 :(得分:1)
class HomeController extends BaseController{
public function profile($company_slug){
$result = Clients::where('company_slaug', '=', $company_slug)->get();
if (empty($result)) {
//not found
}
return View::make("home.profiles", compact("result"));
}
}