2012-08-23 45 views
5

默認情況下,我們通常通過ID號搜索數據庫表上的任何條目。但我無法找到如何在名稱列中搜索任何條目。如何在雄辯Laravel中使用名稱查找條目?

這是我查找入口和渲染它的代碼來查看

控制器:作者

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'=>'[email protected]')); 

查看:

@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/顯示文章的名字類別/ ID)

回答

20

在你的控制器,你總是會被$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); 

} 

我希望能幫到你。

作爲一個方面說明,你的雄辯模型。

如果您使用正確的命名約定,則無需提供表名稱。

class Author extends Eloquent { 

} 

注奇異Author將映射到表自動調用Authors沒有你的任何干預。

+0

謝謝,幫助很多 – monk

+0

不幸的是沒有工作 – monk

+0

確實兩個詞之間的空間很重要嗎? – monk