Php laravel模型中的自定义路径
我有两个模型在拉威尔5.5 Article.php类,具有2个函数: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(
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;