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 实战:开发知乎 (9)定义话题与问题关系的更多相关文章

  1. Laravel Vuejs 实战:开发知乎 (6)发布问题

    1.view部分: 安装一个扩展包:Laravel-UEditor composer require "overtrue/laravel-ueditor:~1.0" 配置 添加下面 ...

  2. Laravel Vuejs 实战:开发知乎 (10)使用 Select2 优化话题选择

    1.添加选择Topic 使用Select2,如何安装Select2 ,具体使用实例 Select2 and Laravel: Ajax Autocomplete 及 Loading data remo ...

  3. Laravel Vuejs 实战:开发知乎 (2)用户登录

    1.安装一个给用户提示的扩展包: 二选一: https://github.com/laracasts/flash [我选的这个]https://github.com/oanhnn/laravel-fl ...

  4. Laravel Vuejs 实战:开发知乎 (8)美化编辑器

    1.使用UEditor增量包: simple-ueditors 执行下载: git clone https://github.com/JellyBool/simple-ueditor.git 2.用此 ...

  5. Laravel Vuejs 实战:开发知乎 (3)本地化和自定义消息

    1.本地化 由于所有blade默认采用的是 _('')方式输出标签文本,所以可以安装一个语言包,直接指定本地语言为zh_CN即可: 安装 https://github.com/caouecs/Lara ...

  6. Laravel Vuejs 实战:开发知乎 (2)用户注册

    1.本节需要发送验证邮件 2.教程使用SendCloud发送邮件 [我使用的是mailtrap] 3. composer require laravel/ui 安装完成后 php artisan ui ...

  7. Laravel Vuejs 实战:开发知乎 (1)项目环境配置和用户表设计

    1.使用laragon新建laravel项目 zhihu 2.配置env文件的database设置 DB_DATABASE=zhihu 3.分析users表需要的字段 4.修改数据库迁移文件: cla ...

  8. Laravel Vuejs 实战:开发知乎 (5)设计问题表

    1.执行命令: php artisan make:model Models/Question -cm 2.设计问题的数据库迁移文件中的字段: <?php use Illuminate\Datab ...

  9. Laravel Vuejs 实战:开发知乎 (7)验证问题表单字段

    上一节代码中已经实现 下面代码中的validate内部配置就是: public function store(Request $request) { // $data = $request->v ...

随机推荐

  1. 【转】常见的hash算法及其原理

    Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是 ...

  2. 增删改查-删除(php)

    <!DOCTYPE html> <html><script type="text/javascript" src="jquery-1.11. ...

  3. 第一篇 网站基础知识 第4章 Java中Socket的用法

    第4章 Java中Socket的用法 4.1 普通Socket的用法 Java中的网络通信是通过Socket实现的,Socket分为ServetSocket和Socket两大类,ServetSocke ...

  4. [LOJ113] 最大异或和 - 线性基

    虽然是SB模板但还真是第一次手工(然而居然又被运算符优先级调戏了) #include <bits/stdc++.h> using namespace std; #define int lo ...

  5. 在Ubuntu 18.04上安装Git

    步骤1.首先,通过运行以下命令确保您的系统和apt包列表完全更新: apt-get update -yapt-get upgrade -y 第2步.在Ubuntu 18.04上安装Git. 现在让我们 ...

  6. python3练习100题——010

    第10天了,今天的题目跟009类似,都比较水,有时间的话再做一道- 链接:http://www.runoob.com/python/python-exercise-example10.html 题目: ...

  7. 使用BeautifulSoup爬取汽车之家新闻

    1 先select到改数据上层的标签,取第一个[0],然后attrs获取单标签里面的内容,或者get_text获取成对标签内文本2 find就是明确了标签之后,是唯一的,就可以使用find(标签名). ...

  8. appium---webview(H5)元素定位

    我们在做UI自动化的时候,肯定需要元素定位,那么webview(H5)的元素怎么定位呢? webview定位方法 方法一: 1.打开chrome浏览器,输入chrome://inspect 2.连接手 ...

  9. pyautocad

    首部必须 #!/usr/bin/env python # -*- coding: utf-8 -*- 导入pyautocad import pyautocad import re # 设置python ...

  10. 智能指针和异常、 weak_ptr、unique_ptr

    12.1.4智能指针和异常 1.在块中创建的动态内存,如果是由内置指针来指向这块内存,那么若是在块结束时未delete这个指针,则该内存不会被释放,若在delete之前发生异常,由于还没执行delet ...