7

默认情况下,我们通常通过 id 号搜索 db 表上的任何条目。但我找不到如何按名称列搜索任何条目。

这是我查找条目并将其呈现以查看的代码

控制器:作者

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);
    }

}

型号:作者

<?php 

class Authors extends Eloquent {
    public static $table = 'authors';
}

路线 :

Route::controller(Controller::detect());

Route::get('author/(:any)', array('as'=>'author', 'uses'=>'authors@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

我如何使 url 不显示 id 而是显示帖子的名称

some.com/category/name(而不是 some.com/category/id)

4

1 回答 1

26

在您的控制器中,您总是会$id按照 Eloquent 查询使用的方式进行搜索:

$authorModel = Authors::find($id);

由于可以为您的命名路由提供 int 或字符串 (:any),因此在控制器中运行类型检查$id并根据结果运行不同的查询。

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);

}

我希望这对你有帮助。

作为旁注,您的 Eloquent 模型。

如果您使用正确的命名约定,则无需提供表名。

class Author extends Eloquent {

}

请注意,单数Author将映射到自动调用的表,Authors无需您的任何干预。

于 2012-08-23T11:14:31.280 回答