如何在雄辩的 Laravel 中使用名称查找条目?

Posted

技术标签:

【中文标题】如何在雄辩的 Laravel 中使用名称查找条目?【英文标题】:How to find entry using name in eloquent Laravel? 【发布时间】:2012-08-18 16:50:08 【问题描述】:

默认情况下,我们通常通过 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

如何使网址不显示 id 而是显示帖子的名称,如

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

【问题讨论】:

【参考方案1】:

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

$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 的表,而无需您的任何干预。

【讨论】:

两个词之间的空格重要吗? 对最后一点有点困惑,哪个单词之间有空格?查询字符串? 我的意思是当我们通过名称路由时,可能会出现类似something.com/hello there/hi there/我的意思是那些空格 你能告诉我它与大卫巴克的回答有何不同吗? @monk 你从不在 URL 中使用空格。如果你这样做,你必须始终确保它被 urlencoded 考虑到这些空间。在任何为您管理 url 的框架中说起来容易做起来难。 (抱歉耽搁了这么久)

以上是关于如何在雄辩的 Laravel 中使用名称查找条目?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel eloquent 中获取当前条目信息

如何从每个父模型中获取 N 条记录?在 laravel 中雄辩

Laravel 4.2 雄辩的动态查询

使用 where 子句检索数据时,无论如何要检索计数 0 吗? (Laravel 雄辩)

如何在 laravel 雄辩的关系中使用 where 子句

雄辩的查询构建器laravel 5.6中的未知列