本项目服务端使用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
项目,会自动创建users
和password_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
会将应用中所有未迁移的文件执行迁移。