laravel如何实现一个简单的投票系统_Laravel简单投票系统实现方法

先创建投票表并定义模型关系,再编写控制器处理投票逻辑,最后设置路由和视图实现文章赞踩功能。

laravel如何实现一个简单的投票系统_Laravel简单投票系统实现方法

laravel中实现一个简单的投票系统并不复杂。只需要几个步骤:创建数据表、定义模型关系、编写控制器逻辑以及设置路由和视图。下面是一个基础但完整的实现方法,适用于文章或帖子的“赞”或“踩”功能。

1. 创建数据库迁移

假设我们要为文章(Post)实现投票功能,先创建一张投票记录表:

 php artisan make:migration create_votes_table 

编辑迁移文件:

 Schema::create('votes', function (Blueprint $table) {     $table->id();     $table->foreignId('post_id')->constrained()->onDelete('cascade');     $table->foreignId('user_id')->constrained()->onDelete('cascade');     $table->tinyInteger('type'); // 1 表示赞成,0 表示反对     $table->timestamps();      $table->unique(['post_id', 'user_id']); // 每个用户每篇文章只能投一票 }); 

运行迁移:

 php artisan migrate 

2. 定义模型关系

Post.php 模型中添加:

 public function votes() {     return $this->hasMany(Vote::class); }  public function upVotes() {     return $this->votes()->where('type', 1); }  public function downVotes() {     return $this->votes()->where('type', 0); } 

User.php 模型中确保已启用Auth,并可选添加:

 public function votes() {     return $this->hasMany(Vote::class); } 

创建 Vote.php 模型:

laravel如何实现一个简单的投票系统_Laravel简单投票系统实现方法

钛投标

钛投标 | 全年免费 | 不限字数 | AI标书智写工具

laravel如何实现一个简单的投票系统_Laravel简单投票系统实现方法97

查看详情 laravel如何实现一个简单的投票系统_Laravel简单投票系统实现方法

 <?php  namespace appModels;  use IlluminateDatabaseEloquentModel;  class Vote extends Model {     protected $fillable = ['post_id', 'user_id', 'type']; } 

3. 编写投票控制器

生成控制器:

 php artisan make:controller VoteController 

VoteController.php 中添加投票逻辑:

 use AppModelsPost; use AppModelsVote; use IlluminateHttpRequest;  public function vote(Request $request, Post $post) {     $request->validate([         'type' => 'required|in:1,0',     ]);      // 用户对当前文章的已有投票     $existingVote = $post->votes()->where('user_id', auth()->id())->first();      if ($existingVote) {         // 更新已有的投票         $existingVote->update(['type' => $request->type]);     } else {         // 创建新投票         $post->votes()->create([             'user_id' => auth()->id(),             'type' => $request->type,         ]);     }      return back()->with('success', '投票成功!'); } 

4. 设置路由

routes/web.php 中添加:

 use AppHttpControllersVoteController;  Route::middleware(['auth'])->group(function () {     Route::post('/posts/{post}/vote', [VoteController::class, 'vote'])->name('posts.vote'); }); 

5. 在视图中添加投票按钮

例如在展示文章的Blade模板中:

 <div>     <p>{{ $post->title }}</p>     <p>{{ $post->content }}</p>      <p>         赞: <strong>{{ $post->upVotes()->count() }}</strong> |         踩: <strong>{{ $post->downVotes()->count() }}</strong>     </p>      <form action="{{ route('posts.vote', $post) }}" method="POST">         @csrf         <button type="submit" name="type" value="1"                  {{ $post->votes()->where('user_id', auth()->id())->where('type', 1)->exists() ? 'disabled' : '' }}>             赞         </button>         <button type="submit" name="type" value="0"                 {{ $post->votes()->where('user_id', auth()->id())->where('type', 0)->exists() ? 'disabled' : '' }}>             踩         </button>     </form> </div> 

这样就能实现每个用户对每篇文章只能投一次赞或踩,且可修改自己的选择。

基本上就这些。你可以根据需要扩展功能,比如ajax提交、前端实时更新计数等。核心逻辑清晰,易于维护。

以上就是laravel如何实现一个简单的投票系统_Laravel简单投票系统实现方法的详细内容,更多请关注php中文网其它相关文章!

上一篇
下一篇
text=ZqhQzanResources