Laravel 实战开发知乎:实现选择话题整个流程

Laravel 实战开发知乎:实现选择话题整个流程 QQ群:595928952 上一节 下一节

Laravel Vuejs 实战:开发知乎 >> Laravel 实战开发知乎:实现选择话题整个流程 视频发布于 2016-12-21

在前面的视频基础之上,这节视频来实现问题和话题的多对多关系,在前端表现就是实现选择话题的整个流程,后端表现为使用 laravel 的多对多关系实现关联
wenjie_zheng

如果用户的自定义话题填写的是 数字 怎么来判断?通过去查询数据库来判断?

JellyBool

你可以把所有 topics id 拿出来,再判断一下有没有这个数字就行

wenjie_zheng

好主意,,,

zddragon

Laravel 实战开发知乎,这个系列视频大概有多少节?

JellyBool

应该很多,36节以上吧。。不过过年前打算更完

zddragon

现在不能单独订阅这个系列的视频吗?

JellyBool

恩,单独的已经关闭很久了

hao0661

代码的颜色很舒服,能分享一下吗?

laravistpublic

获取特定资源的关联模型的话我觉得这样写更好点:

$question = Question::with('topics')->findOrFail($id);
JellyBool

好的,我学习一个

hard88

你好,我在添加了$question->topics()->attach($topics);语句后报错:
QueryException in Connection.php line 770:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'question_id' in 'field list' (SQL: insert into question_topic (created_at, question_id, topic_id, updated_at) values (2017-02-27 20:03:20, 7, 13, 2017-02-27 20:03:20), (2017-02-27 20:03:20, 7, 2, 2017-02-27 20:03:20))

JellyBool

你的关联表 question_topic 没有 question_id 这个字段吧,跟视频来吧

hard88

有。。我还重新生成了一遍这个表,刚又检查了一遍发现question_id这个字段 写成了queistion_id。。这种问题真的,麻烦了

lg23

http://www.zt.com/questions/2
浏览器输入上面内容时,出现下面报错:
Call to undefined relationship [topics] on model [App\Models\Question].
检查控制器及model没发现问题
Question model

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Question extends Model
{
    protected $fillable = ['title', 'body', 'user_id'];

    /**
     * 定义多对多关系
     */
    public function topics()
    {
        return $this->belogsToMany(Topic::class)->withTimestamps();
    }
}

QuestionsController 控制器

public function show($id)
    {
        // 使用 with 方法指定想要预载入的关联对象 预载入可以大大提高程序的性能
        // 这里的 topics 是App\Models\Question 中的 topics 的方法
        $question = Question::where('id',$id)->with('topics')->get();

        // compact 创建一个包含变量名和它们的值的数组
        return view('questions.show',compact('question'));
    }
JellyBool

看不出有什么错误。。。
试试这样?

Question::with('topics')->where('id',$id)

所以你还是照你的想法来学?

lg23

Question::where('id',$id)->first();
这 样是没有问题的
其实很多东西我都学过,只是理解不深刻或是没记住。我会抓紧时间看群主的视频,比我以前学习的例子好很多。

lg23
public function topics()
    {
        return $this->belongsToMany('App\Models\Topic')->withTimestamps();
    }

这里有问题,我至于具体是哪?我也不知道,我从文档中复制了这句就对了?
当然 Topic::calss 也是正确的