在 Laravel 中创建时将 $id 附加到 post slug
Append $id to post slug on create in Laravel
我正在使用 Laravel 从表单创建博客 post,并将标题和 body 传递给 PostsController
中的 create
方法=].
slug 必须是唯一的,所以尽管下面的方法有效,但当我使用重复的标题时它会失败。
我打算将 $post->id
附加到 slug,所以 this-is-the-post-title
会变成 this-is-the-post-title-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->id
连接到 slug 的末尾,但它不起作用。
我假设这是因为 id
直到 save()
?
才被分配
有没有办法获取要使用的id?
我想只返回数据库中的行数,然后加一,但是如果两个人同时 posted 就会失败。
(我是 Laravel 的新手,自学 PHP,所以这可能很明显 obvious/simple,但我们不胜感激。)
先保存后更新:
$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;
});
我正在使用 Laravel 从表单创建博客 post,并将标题和 body 传递给 PostsController
中的 create
方法=].
slug 必须是唯一的,所以尽管下面的方法有效,但当我使用重复的标题时它会失败。
我打算将 $post->id
附加到 slug,所以 this-is-the-post-title
会变成 this-is-the-post-title-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->id
连接到 slug 的末尾,但它不起作用。
我假设这是因为 id
直到 save()
?
有没有办法获取要使用的id?
我想只返回数据库中的行数,然后加一,但是如果两个人同时 posted 就会失败。
(我是 Laravel 的新手,自学 PHP,所以这可能很明显 obvious/simple,但我们不胜感激。)
先保存后更新:
$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;
});