Laravel+Vue 问答平台项目实战API接口 - 构建Laravel项目

623 阅读1分钟

本项目服务端使用Laravel 5.8 框架进行开发。

本地环境使用docker部署的lnmp环境

目录

  • composer构建项目
  • 创建数据表以及数据模型
  • 填充测试数据

创建项目

在终端选好工作目录后,执行命令composer create-project --prefer-dist laravel/laravel ant-qa-server 5.8.*

创建一个新项目ant-qa-server

配置数据库

修改.env文件

DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

改为自己的数据库配置信息

构建migration迁移文件以及数据模型

迁移文档参考地址

新创建的Laravel项目,会自动创建userspassword_resets表的迁移文件,本项目还需要创建

  • questions表,存放问题记录
  • like_questions表,存放用户喜欢问题记录
  • answer_question表,存放用户回答问题记录

创建迁移文件

问题记录表

使用artisan命令php artisan make:model Models/Question -m

创建一个迁移文件,位于database/migrations,编辑内容如下

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateQuestionsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('questions', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('title')->comment('问题标题');
            $table->text('content')->comment('内容内容');
            $table->bigInteger('user_id')->comment('创建人用户id');
            $table->integer('comment_num')->default(0)->comment('评论数');
            $table->integer('like_num')->default(0)->comment('点赞数');
            $table->softDeletes();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('questions');
    }
}

同时会创建一个对应的模型,位于app/Models/Models目录不存在,会自动创建,编辑内容如下

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Question extends Model
{
    use SoftDeletes;

    protected $fillable = ['title', 'user_id', 'content', 'comment_num', 'like_num'];

    public function answers()
    {
        return $this->hasMany(AnswerQuestion::class);
    }
}

answers方法定义了问题与回答之间的一对多的关联关系

喜欢问题记录表

php artisan make:model Models/LikeQuestion -m

编辑迁移文件database/migrations/*_create_like_questions_table_*

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateLikeQuestionsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('like_questions', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->bigInteger('user_id')->comment('喜欢人的用户id');
            $table->bigInteger('question_id')->comment('被喜欢的问题id');
            $table->softDeletes();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('like_questions');
    }
}

编辑app/Models/LikeQuestion模型

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class LikeQuestion extends Model
{
    use SoftDeletes;

    protected $fillable = ['user_id', 'question_id'];
}
回答问题记录表

php artisan make:model Models/AnswerQuestion -m

编辑迁移文件database/migrations/*_create_answer_questions_table_*

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateAnswerQuestions extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('answer_questions', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->bigInteger('user_id')->comment('喜欢人的用户id');
            $table->bigInteger('question_id')->comment('被喜欢的问题id');
            $table->text('content')->comment('回答的内容');
            $table->softDeletes();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('answer_questions');
    }
}

编辑app/Models/AnswerQuestion模型

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class AnswerQuestion extends Model
{
    use SoftDeletes;

    protected $fillable = ['user_id', 'question_id', 'content'];
}

在项目根目录下执行artisan命令php artisan migrate会将应用中所有未迁移的文件执行迁移。