Laravel Vuejs 实战:开发知乎 定义话题与问题关系

Posted 三个臭皮匠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel Vuejs 实战:开发知乎 定义话题与问题关系相关的知识,希望对你有一定的参考价值。

1.话题【Topic】

执行命令:

  1 php artisan make:model Topic –cmr


修改****_**_**_create_topics_table.php数据库迁移文件如下:

  1 class CreateTopicsTable extends Migration
  2 {
  3     /**
  4      * Run the migrations.
  5      *
  6      * @return void
  7      */
  8     public function up()
  9     {
 10         Schema::create(‘topics‘, function (Blueprint $table) {
 11             $table->bigIncrements(‘id‘);
 12             $table->string(‘name‘);
 13             $table->text(‘content‘)->nullable();
 14             $table->integer(‘questions_count‘)->default(0);
 15             $table->integer(‘followers_count‘)->default(0);
 16             $table->timestamps();
 17         });
 18     }
 19 
 20     /**
 21      * Reverse the migrations.
 22      *
 23      * @return void
 24      */
 25     public function down()
 26     {
 27         Schema::dropIfExists(‘topics‘);
 28     }
 29 }
 30 

修改Topic.php文件如下:

  1 class Topic extends Model
  2 {
  3     //
  4     protected $fillable = [‘name‘, ‘questions_count‘];
  5 
  6 }
  7 

2.处理话题与问题之间的关联关系【多对多】

单独建一个数据库迁移文件存储话题与问题之间的关系;

创建这个数据库迁移文件,执行命令:

  1 php artisan make:migration create_questions_topics_table --create=questions_topics

修改 ****_create_questions_topics_table.php数据库迁移文件:

  1 class CreateQuestionsTopicsTable extends Migration
  2 {
  3     /**
  4      * Run the migrations.
  5      *
  6      * @return void
  7      */
  8     public function up()
  9     {
 10         Schema::create(‘questions_topics‘, function (Blueprint $table) {
 11             $table->bigIncrements(‘id‘);
 12             $table->bigInteger(‘question_id‘)->unsigned()->index();
 13             $table->bigInteger(‘topic_id‘)->unsigned()->index();
 14             $table->timestamps();
 15         });
 16     }
 17 
 18     /**
 19      * Reverse the migrations.
 20      *
 21      * @return void
 22      */
 23     public function down()
 24     {
 25         Schema::dropIfExists(‘questions_topics‘);
 26     }
 27 }
 28 

执行命令建数据表:

  1 php artisan migrate

3.定义模型Model之间的关联关系:

具体原理及更多介绍看官方文档:模型关联

也有英文版的样例介绍:

larashout网站的:

laravel-eloquent

itsolutionstuff网站的:

Laravel One to One Eloquent Relationship Tutorial

Laravel One to Many Eloquent Relationship Tutorial

Laravel Many to Many Eloquent Relationship Tutorial

Laravel Has Many Through Eloquent Relationship Tutorial

Laravel One to Many Polymorphic Relationship Tutorial

Laravel Many to Many Polymorphic Relationship Tutorial

修改Topic.php文件:

  1 class Topic extends Model
  2 {
  3     //
  4     protected $fillable = [‘name‘, ‘questions_count‘];
  5 
  6 
  7     public function questions()
  8     {
  9         return $this->belongsToMany(
 10             Question::class,
 11             ‘questions_topics‘ //表名我设置的是questions_topics,可能不是系统自动解析的question_topic
 12         )->withTimestamps();//withTimestamps操作questions_topics表中create_at及updated_at字段的;
 13     }
 14 }
 15 

修改Question.php文件:

  1 class Question extends Model
  2 {
  3     //
  4     protected $fillable = [‘title‘, ‘content‘, ‘user_id‘];
  5 
  6     public function topics()
  7     {
  8         return $this->belongsToMany(
  9             Topic::class,
 10             ‘questions_topics‘ //表名我设置的是questions_topics,可能不是系统自动解析的question_topic
 11         )->withTimestamps();//withTimestamps操作questions_topics表中create_at及updated_at字段的
 12     }
 13 }
 14 

话题与问题关系建立完成。


以上是关于Laravel Vuejs 实战:开发知乎 定义话题与问题关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Vuejs 实战:开发知乎 (37)私信标为已读

Laravel Vuejs 实战:开发知乎 (27)对答案进行点赞

向军laravel和vuejs webAPP实战开发

后端的 Laravel VueJS 路由器

Laravel & VueJS 变量定义

VueJS 3 + Laravel:未捕获的类型错误:无法读取未定义的属性“组件”