视图网址拉拉维尔



我正在开发一个网站,当用户上传 xml 提要时会生成新内容。视图创建页面,其中 id 是 url 的一部分,例如。news/culture/sa/73news/culture/us/79.

第一个要求是激活单个视图,

我添加了一个活动复选框,在渲染视图之前在控制器中选中该复选框,我想做的是这个。 如果我创建news/culture/sa/74,并将其设置为活动,则在数据库中它应该选择ID 73(以及所有其他标记为SA的id(并使它们处于非活动状态。

我在控制器中尝试了以下查询:

$culture = Culture::with('saculture.usculture')
->where('id', $cultureId)
->where('template_id', $type)
->where('publish_date', '<=', $now->toDateTimeString())
->where('unpublish_date', '>=', $now->toDateTimeString())
->where('is_live', '=', 1)
->where('id', '<>', $cultureId)
->update('is_live', '=', 0)
->first();

我试图通过上述实现以下目标。 从区域性表中选择 *,其中template_id(即类别 ID(与新创建的 ID 相同。 但是我要更新的是除此ID之外的所有其他ID不处于活动状态。

第二个问题是基于网址的问题。

目前,上传生成的网址具有category_id和帖子 ID:www.site.com/2/1www.site.com/2/2www.site.com/2/3... 我想要实现的是以下内容。覆盖 URL,例如www.site.com/2/1www.site.com/culture/sa(这是活动的,用户无法访问其他页面www.site.com/2/2www.site.com/2/3(,因为这些页面将通过第一个查询被禁用。

希望现在更有意义。

$culture = Culture::with('saculture.usculture')
->where('id', $cultureId)
...
->where('id', '<>', $cultureId)
->first();

这在技术上不可能返回任何结果。 id 不能同时等于 $cultureId 和 $cultureId 不同。(至少在你观察它的时候不会;) - 来自薛定谔先生和他的猫的问候(

  1. 将 1 个项目标记为活动,并将所有其他项目重置为非活动

    Culture::where('template_id', $type)
    ->where('id', '<>', $cultureId)
    ->update(['is_live' => 0]);
    

    不要太担心其他条件。如果某个项目未发布,则只要您只希望单个项目处于活动状态,就可以将其禁用。is_live = 1 检查以仅停用之前处于活动状态的条目(如果我正确理解您的概念,无论如何应该只有 1 个条目(是不必要的。除非必要,否则数据库可以负责不更新行。

  2. 覆盖路由

    据我了解,这就是您想要实现的目标:

    用户打开 www.site.com/2/1,其中 2 是 sa 的template_id,1 不是该类别中的活动区域性。然后,用户被重定向到 www.site.com/culture/sa,这是类别 sa 的当前活动区域性的默认登录页面。

    如果 www.site.com/2/1 实际上是 template_id 2 的当前活动区域性,则网站将返回该区域性对象(或其视图(。

    这里有一个片段,至少应该概述如何解决这个问题:

    Route::get('{templateId}/{cultureId}', function ($templateId, $cultureId) {
    $activeMatchingCultures = Culture::where('template_id', $templateId)->where('is_active', 1)->first();
    if ($activeMatchingCulture->id === $cultureId) {
    return $activeMatchingCulture;
    }
    else {
    return redirect('/culture/'.$templateId); // You didn't outline how to find the slug for a templateId, you'll have to replace that yourself
    }        
    })->where(['templateId' => '[0-9]+', 'cultureId' => '[0-9]+']);
    

相关内容

  • 没有找到相关文章

最新更新