在 Laravel 中实现保留用户对评论的评论删除可以按照以下步骤进行:
php artisan make:migration create_comments_table --create=comments
php artisan make:migration create_comment_deletions_table --create=comment_deletions
在 create_comments_table
迁移文件中添加以下代码:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateCommentsTable extends Migration
{
public function up()
{
Schema::create('comments', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->unsignedBigInteger('parent_id')->nullable();
$table->text('content');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('parent_id')->references('id')->on('comments')->onDelete('cascade');
});
}
public function down()
{
Schema::dropIfExists('comments');
}
}
在 create_comment_deletions_table
迁移文件中添加以下代码:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateCommentDeletionsTable extends Migration
{
public function up()
{
Schema::create('comment_deletions', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('comment_id');
$table->unsignedBigInteger('user_id');
$table->timestamps();
$table->foreign('comment_id')->references('id')->on('comments')->onDelete('cascade');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
}
public function down()
{
Schema::dropIfExists('comment_deletions');
}
}
Comment.php
模型中定义与用户和评论删除记录的关联关系。可以在模型中添加以下代码:use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
public function deletions()
{
return $this->hasMany(CommentDeletion::class);
}
}
在 CommentDeletion.php
模型中定义与评论和用户的关联关系。可以在模型中添加以下代码:
use Illuminate\Database\Eloquent\Model;
class CommentDeletion extends Model
{
public function comment()
{
return $this->belongsTo(Comment::class);
}
public function user()
{
return $this->belongsTo(User::class);
}
}
CommentController.php
中添加以下代码:use App\Comment;
use App\CommentDeletion;
use Illuminate\Http\Request;
class CommentController extends Controller
{
public function deleteComment(Request $request, $commentId)
{
$user = $request->user();
$comment = Comment::findOrFail($commentId);
// 检查用户是否有权限删除评论
if ($user->canDeleteComment($comment)) {
// 创建评论删除记录
CommentDeletion::create([
'comment_id' => $comment->id,
'user_id' => $user->id,
]);
// 执行评论删除操作
$comment->delete();
return response()->json(['message' => '评论删除成功']);
} else {
return response()->json(['message' => '您无权删除此评论']);
}
}
}
在上述代码中,deleteComment
方法首先检查用户是否有权限删除评论,然后创建评论删除记录并删除评论。如果用户没有权限删除评论,则返回相应的错误消息。
deleteComment
方法。可以在 web.php
或 api.php
文件中添加以下代码:Route::delete('/comments/{commentId}', 'CommentController@deleteComment');
这将创建一个删除评论的路由,使用 DELETE 请求并带有评论的 ID。
现在,当用户调用该路由并满足权限要求
下一篇:保留用户输入的输入框值