Laravel cviebrock/eloquent-sluggable 作用域为其他对象

问题描述 投票:0回答:1

我有一个 Laravel 项目,它使用这个包从友好的 URL 创建 slugs - https://github.com/cviebrock/eloquent-sluggable

通过我所做的所有研究,我知道我可以使它们独一无二,并且该包将通过创建像这样的 slugs 自动处理它:

new-page
new-page-2
new-page-3

我的困惑是这样的。我希望将蛞蝓的独特性扩展到其他物体。例如,我有一个用户,他们的 URL 是这个

/john-smith
。用户有许多专辑,每个专辑(使用此包生成专辑的 slugs)将类似于:

/john-smith/albums/new-thing

并且可能的重复会生成类似以下内容:

/john-smith/albums/new-thing-2

现在,如果另一个用户也想创建一个名为

New Thing
的相册,那么使用此包的标准设置,它将生成一个如下 URL:

/jane-smith/albums/new-thing-3

而不是更想要的东西:

/jane-smith/albums/new-thing

我想我明白这是为什么。我确信它与正在进行的模型绑定有关,并且如果它在系统中不是唯一的,则它无法绑定专辑块。

有人知道使用这个包甚至不同的包来完成这样的事情的方法吗?

laravel eloquent slug
1个回答
0
投票

感谢@ceejayoz 让我回去重新阅读文档。我第一次并没有完全理解它,但我也找到了另一个实际的例子,这对我很有帮助!

修复方法是在模型类中添加类似的内容:

public function scopeWithUniqueSlugConstraints(Builder $query, Model $model, $attribute, $config, $slug)
{
    $user = $model->user;
    return $query->where('user_id', $user->getKey());
}

这会生成用户独有的 slugs。仍在测试,但它似乎正是我所需要的。

© www.soinside.com 2019 - 2024. All rights reserved.