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 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
修改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)定义话题与问题关系的更多相关文章
- Laravel Vuejs 实战:开发知乎 (6)发布问题
1.view部分: 安装一个扩展包:Laravel-UEditor composer require "overtrue/laravel-ueditor:~1.0" 配置 添加下面 ...
- Laravel Vuejs 实战:开发知乎 (10)使用 Select2 优化话题选择
1.添加选择Topic 使用Select2,如何安装Select2 ,具体使用实例 Select2 and Laravel: Ajax Autocomplete 及 Loading data remo ...
- Laravel Vuejs 实战:开发知乎 (2)用户登录
1.安装一个给用户提示的扩展包: 二选一: https://github.com/laracasts/flash [我选的这个]https://github.com/oanhnn/laravel-fl ...
- Laravel Vuejs 实战:开发知乎 (8)美化编辑器
1.使用UEditor增量包: simple-ueditors 执行下载: git clone https://github.com/JellyBool/simple-ueditor.git 2.用此 ...
- Laravel Vuejs 实战:开发知乎 (3)本地化和自定义消息
1.本地化 由于所有blade默认采用的是 _('')方式输出标签文本,所以可以安装一个语言包,直接指定本地语言为zh_CN即可: 安装 https://github.com/caouecs/Lara ...
- Laravel Vuejs 实战:开发知乎 (2)用户注册
1.本节需要发送验证邮件 2.教程使用SendCloud发送邮件 [我使用的是mailtrap] 3. composer require laravel/ui 安装完成后 php artisan ui ...
- Laravel Vuejs 实战:开发知乎 (1)项目环境配置和用户表设计
1.使用laragon新建laravel项目 zhihu 2.配置env文件的database设置 DB_DATABASE=zhihu 3.分析users表需要的字段 4.修改数据库迁移文件: cla ...
- Laravel Vuejs 实战:开发知乎 (5)设计问题表
1.执行命令: php artisan make:model Models/Question -cm 2.设计问题的数据库迁移文件中的字段: <?php use Illuminate\Datab ...
- Laravel Vuejs 实战:开发知乎 (7)验证问题表单字段
上一节代码中已经实现 下面代码中的validate内部配置就是: public function store(Request $request) { // $data = $request->v ...
随机推荐
- .net 文件接口的封装,写日志,创建文件log
public class FileSupport { public static FileSupport Instance = new FileSupport(); public static str ...
- JavaScript对象之属性标签
本文介绍一下js对象的属性标签(configurable.writable.enumerable.value.get.set)的使用. 上图的要点为: 1.Object.getOwnPropertyD ...
- JS高级---函数作为返回值使用
函数作为返回值使用 function f1() { console.log("f1函数开始"); return function () { console.log("函数 ...
- JS 每次进入自动加载JS
对于动态文件,比如 index.asp?id=... 或者 index.aspx?id=... 相信有经验的程序员都知道怎样禁止浏览器缓存数据了.但是对于静态文件(css,jpg,gif等等), 在什 ...
- selenium的定位方法-单元素定位
selenium自动化测试中,提供了单个元素定位方法,多个元素定位方法,2种方式都是根据元素属性:ID.NAME.CLASS_NAME.TAG_NAME.CSS_SELECTOR.XPATH.LINK ...
- 新手学习PHP的避雷针,这些坑在PHP开发中就别跳了
不要!用记事本编辑php文件 早些年能用记事本编程是一些人自我吹嘘的资本,能用记事本编程就是牛逼的代名词.但是这里要告诫大家的是,千万不要使用Windows自带的记事本编辑任何文本文件.用Window ...
- Oracle常用函数记录
Oracle函数 --schema:hcf --不带任何参数 http://www.cnblogs.com/wuyisky/archive/2010/05/11/oracle_function.htm ...
- Python出现Could not find a version that satisfies the requirement openpyxl (from versions: )
一.环境使用python3.7时,用pip安装openpyxl出现如下错误: 系统环境:windows10家庭版Python版本:python3.7.1IDE:sublime_text 3二. 解决方 ...
- (原)Vue 单文件组件安装 (创建vue-cli 项目)
更新于20200220 题外话:久违了我的博客园 正题: 1.准备工作,安装环境 1.安装node 官网下载安装即可 -- 配置环境变量 2.安装npm (基于node.js 包管理器) 3.安装c ...
- Lenet 神经网络-实现篇(2)
Lenet 神经网络在 Mnist 数据集上的实现,主要分为三个部分:前向传播过程(mnist_lenet5_forward.py).反向传播过程(mnist_lenet5_backword.py). ...