Php laravel模型中的自定义路径

Php laravel模型中的自定义路径,php,laravel-5,laravel-routing,Php,Laravel 5,Laravel Routing,我有两个模型在拉威尔5.5 Article.php类,具有2个函数: public function sluggable() { return [ 'slug' => [ 'source' => 'title' ] ]; } public function path() { return "/$this->slug"; } Category.php public function childs(

我有两个模型在拉威尔5.5

Article.php类,具有2个函数:

public function sluggable()
{
    return [
        'slug' => [
            'source' => 'title'
        ]
    ];
}

public function path()
{
    return "/$this->slug";
}
Category.php

public function childs() {
      return $this->hasMany('App\Category','parent_id','id') ;
}
类别表:

id /  article_id  / parent_id / name
现在,例如,对于视图中的代码:
{{{$article->path()}

it prints:  `example.com/article_slug`
但我想要这样的模拟:

example.com/parentCategory/subCategory-1/../subCategory-n/article\u slug


如何在
path()
函数中执行此操作?可能吗?

您需要在模型顶部使用
Sluggable
特性,如下所示:

use Cviebrock\EloquentSluggable\Sluggable;

class Post extends Model
{
    use Sluggable;

    /**
     * Return the sluggable configuration array for this model.
     *
     * @return array
     */
    public function sluggable()
    {
        return [
            'slug' => [
                'source' => 'title'
            ]
        ];
    }
}

我假设你的问题是,如何为那些可以通过slug产生无限多子元素的类别生成uri

我将如何着手解决类似的问题,是通过在MySQL中使用分层数据模式,这将允许您通过执行一个查询来获得后代/祖先的列表。有很多方法可以实现这一点,但是为了解释这个问题,我将解释如何使用嵌套集模式来实现它。更具体地说,我将演示如何使用lazychaser的嵌套集实现这一点

类别表迁移 嵌套的集合列将向表中添加
\u lft
\u rgt
父id
列。我建议您对嵌套集模型的工作原理进行一些研究,以了解左列和右列的用途

类别模型 现在,您可以创建一个子类别,如下所示:

$parentCategory = Category::first();

$parentCategory->children()->create([
    'name' => 'Example Category'
]);
这意味着在深度嵌套的类别上,您可以执行以下操作:

$categories = Category::ancestorsAndSelf($article->category_id);
这将返回上述类别的所有祖先,然后要获取uri,您可以执行以下操作:

$uri = $categories->pluck('slug')->implode('/') . '/' . $article->slug;

我可以和slug一起工作,slug现在可以工作了。请再读一遍我的问题。我想知道如何在路径中插入相关类别?
$categories = Category::ancestorsAndSelf($article->category_id);
$uri = $categories->pluck('slug')->implode('/') . '/' . $article->slug;