By default we generally search any entry on db table by id number. But I could not find how to search any entry by the name column.
This is my code for finding entry and rendering it to view
Controller : Authors
class Authors_Controller extends Base_Controller {
public $restful = true;
public function get_view($id){
$authorModel = Authors::find($id);
return View::make('authors.view')
->with('author', $authorModel)
->with('title', $authorModel->name);
}
}
Model : Authors
<?php
class Authors extends Eloquent {
public static $table = 'authors';
}
Route :
Route::controller(Controller::detect());
Route::get('author/(:any)', array('as'=>'author', 'uses'=>'authors@view'));
View :
@layout('main.index')
@section('content')
<h1>{{$author->name}}</h1>
<p>
{{$author->bio}}
</p>
<small>
{{$author->created_at}} |
{{HTML::link(URL::$base.'/authors/', 'Go back')}}
</small>
@endsection
How do i make the url as not to display id but to display the name of the post like
some.com/category/name (instead of some.com/category/id)
In your controller you are always going to search by $id
as your Eloquent query uses:
$authorModel = Authors::find($id);
As your named route can be supplied with an int or string (:any) run a type check in the controller on $id
and run a different query based on the result.
public function get_view($id)
{
if (is_numeric($id))
{
$authorModel = Authors::find($id);
}
else
{
$column = 'name'; // This is the name of the column you wish to search
$authorModel = Authors::where($column , '=', $id)->first();
}
return View::make('authors.view')
->with('author', $authorModel)
->with('title', $authorModel->name);
}
I hope that helps you.
As a side note, your Eloquent model.
There is no need for you to supply a table name if you use correct naming conventions.
class Author extends Eloquent {
}
Note the singular Author
will map to a table called Authors
automatically without any intervention from you.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.