Php 在Laravel中创建时向post slug追加$id

Php 在Laravel中创建时向post slug追加$id,php,laravel,slug,laravel-5.6,Php,Laravel,Slug,Laravel 5.6,我正在使用Laravel从表单创建一篇博客文章,并将标题和正文传递到PostsController中的create方法 slug必须是唯一的,所以尽管下面的方法有效,但当我使用重复的标题时,它失败了 我打算在slug中添加$post->id,因此这是帖子标题将变成这是帖子标题-12 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Post; use Session; use Carbo

我正在使用Laravel从表单创建一篇博客文章,并将标题和正文传递到
PostsController
中的
create
方法

slug必须是唯一的,所以尽管下面的方法有效,但当我使用重复的标题时,它失败了

我打算在slug中添加
$post->id
,因此
这是帖子标题
将变成
这是帖子标题-12

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Post;
use Session;
use Carbon\Carbon;

class PostController extends Controller
{
  public function store(Request $request) {
  $this->validate($request, [
    'title' => 'required|max:255',
    'body'  => 'required'
  ]);

  $post = new Post;
  $post->title = $request->input('title');
  $post->body = $request->input('body');
  $post->slug = str_slug($request->input('title'), '-');
  $post->save();

  Session::flash('success', 'The blog post was successfully saved!');

  return redirect()->route('posts.show', $post->id);
}

先保存后更新:

$post = \DB::transaction(function() use($request) {
    $post = new Post;
    $post->title = $request->input('title');
    $post->body = $request->input('body');
    $post->slug = uniqid(); //to avoid unique column conflict, it will be overwritten
    $post->save();

    $post->slug = str_slug($request->input('title').' '.$post->id, '-');
    $post->save();

    return $post;
});

先保存后更新:

$post = \DB::transaction(function() use($request) {
    $post = new Post;
    $post->title = $request->input('title');
    $post->body = $request->input('body');
    $post->slug = uniqid(); //to avoid unique column conflict, it will be overwritten
    $post->save();

    $post->slug = str_slug($request->input('title').' '.$post->id, '-');
    $post->save();

    return $post;
});

如果slug列具有唯一的约束,则必须小心将其作为
'anything'
输入。除此之外,这应该有用。太好了,谢谢。我本来是这样做的,但失败了。我现在意识到我使用了“testpost”作为标题,但它失败了,因为我在数据库中已经有了一个
testpost
slug。截断表后,这意味着我将无法将“test post”作为slug,因为它将自动附加id。返回到上面的答案,如果我将一篇文章标题为“post 2”,并且已经有一篇文章带有slug
post-2
非常感谢,如果slug列具有唯一的约束,你必须小心你作为“任何东西”输入的内容。除此之外,这应该有用。太好了,谢谢。我本来是这样做的,但失败了。我现在意识到我使用了“testpost”作为标题,但它失败了,因为我在数据库中已经有了一个
testpost
slug。截断表后,这意味着我将无法将“test post”作为slug,因为它将自动附加id。返回到上面的答案,如果我将一篇文章标题为“post 2”,并且已经有一篇文章带有slug
post-2
非常感谢