• Laravel 5.8 做个知乎 11 —— 添加关注 toggle方法 的使用


    1 创建关注表数据

    php artisan make:migration create_user_question_table --create=user_question

    databasemigrations2021_07_15_002200_create_user_question_table.php

        public function up()
        {
            Schema::create('user_question', function (Blueprint $table) {
                $table->bigIncrements('id');
                $table->integer('user_id')->unsigned()->index();
                $table->integer('question_id')->unsigned()->index();
                $table->timestamps();
            });
        }
    View Code
    php artisan migrate

    2 model

    2.1 Follow

    php artisan make:model Follow

    appFollow.php

    <?php
    
    namespace App;
    
    use IlluminateDatabaseEloquentModel;
    
    class Follow extends Model
    {
        //
        protected $table = 'user_question';
        protected $fillable = ['user_id','question_id'];
    }
    View Code

    2.2 User

    appUser.php

       /* public function follows($question)
        {
            return Follow::create([
                'question_id'   =>$question,
                'user_id'       =>$this->id
            ]);
        }*/
       public function follows()
       {
           return $this->belongsToMany(Question::class,'user_question')
             ->withTimestamps();
       }
       public function followThis($question)
       {
           return $this->follows()->toggle($question);
       }
        
        public function followed($question)
        {
            return !! $this->follows()->where('question_id',$question)->count();
        }
    View Code

    2.3 Question

    appQuestion.php

        public function followers()
        {
            return $this->belongsToMany(User::class,'user_question')
              ->withTimestamps();
        }
    View Code

    3 控制器

    php artisan make:controller QuestionFollowController
    <?php
    
    namespace AppHttpControllers;
    
    use IlluminateHttpRequest;
    use IlluminateSupportFacadesAuth;
    
    class QuestionFollowController extends Controller
    {
        public function __construct()
        {
            $this->middleware('auth');
        }
        
        
        //
        public function follow($question)
        {
            Auth::user()->followThis($question);
            return back();
        }
    }
    View Code

    4 路由

    web.php

    Route::get('questions/{question}/follow','QuestionFollowController@follow');

    5 模板

    esourcesviewsquestionsshow.blade.php

                <div class="col-md-3">
                    <div class="card">
                        <div class="card-header">
                            <h2>{{ $question->followers_count }}</h2>
                            <span>关注者</span>
                        </div>
                        <div class="card-body">
    
                            <a href="/questions/{{$question->id}}/follow"
                               class="btn  {{Auth::check() &&  Auth::user()->followed($question->id) ? 'btn-success':'btn-info' }}">
                                {{Auth::check() && Auth::user()->followed($question->id) ?'已关注' :'关注该问题'     }}
    
                            </a>
                            <a href="#container" class="btn btn-primary">
                                撰写答案
                            </a>
                        </div>
                    </div>
                </div>
  • 相关阅读:
    POJ
    hdu 5652
    CodeForces
    #6285. 数列分块入门 9
    #6284. 数列分块入门 8
    #6283. 数列分块入门 7
    #6282. 数列分块入门 6
    #6280. 数列分块入门 4 #6281. 数列分块入门 5
    #6278. 数列分块入门 2和#6278. 数列分块入门 3
    spark-sklearn TypeError: 'JavaPackage' object is not callable
  • 原文地址:https://www.cnblogs.com/polax/p/15017528.html
Copyright © 2020-2023  润新知