7

デフォルトでは、通常、db テーブルのエントリを ID 番号で検索します。しかし、名前列でエントリを検索する方法が見つかりませんでした。

これは、エントリを見つけて表示するための私のコードです

管理者 : 著者

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

IDを表示するのではなく、投稿の名前を表示するようにURLを作成するにはどうすればよいですか

some.com/category/name (some.com/category/id の代わりに)

4

1 に答える 1

26

コントローラーでは、Eloquent クエリが使用するように常に検索し$idます。

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

名前付きルートには int または string (: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 に答える