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


    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 

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

  • 相关阅读:
    CSS3实现翻转菜单效果
    C语言根据日期取其位于一年中的第几天
    实习第一周小记------生活不易
    [置顶] iOS开发规范
    理解 Neutorn LBaaS
    FWaaS 实践: 允许 ssh
    实践 Neutron FWaaS
    理解 Neutron FWaaS
    应用新安全组
    Neutron 默认安全组规则
  • 原文地址:https://www.cnblogs.com/dzkjz/p/12376741.html
Copyright © 2020-2023  润新知