Laravel关联模型报错:找不到blogpost_post_id字段,求解决
嘿,我一眼就看出问题所在啦!
Laravel 默认会根据模型名+主键名来生成中间表的字段名,但你的情况比较特殊:
- 你的
Blogpost模型主键不是默认的id,而是post_id - 你的
Blogtag模型主键是tag_id,同样不是默认值 - 而你的中间表
blogpost_blogtag里用的是简洁的post_id和tag_id,不是 Laravel 默认猜测的blogpost_post_id和blogtag_tag_id
所以你需要在关联关系里手动指定中间表的字段,同时最好在模型里明确声明主键,这样 Laravel 就不会乱猜啦!
第一步:给模型指定自定义主键
在 Blogpost.php 里添加:
protected $primaryKey = 'post_id';
在 Blogtag.php 里添加:
protected $primaryKey = 'tag_id';
在 Postcategory.php 里也加上(避免后续其他关联出问题):
protected $primaryKey = 'cat_id';
第二步:修改关联关系的定义
更新 Blogpost.php 里的 blogtags 方法:
public function blogtags(){ // 参数依次是:关联模型、中间表名、当前模型在中间表的外键、关联模型在中间表的外键 return $this->belongsToMany('App\Blogtag', 'blogpost_blogtag', 'post_id', 'tag_id'); }
更新 Blogtag.php 里的 blogposts 方法:
public function blogposts(){ // 注意这里的外键顺序要反过来 return $this->belongsToMany('App\Blogpost', 'blogpost_blogtag', 'tag_id', 'post_id'); }
这样修改之后,Laravel 就能正确找到中间表里的 post_id 和 tag_id 字段,不会再生成错误的 blogpost_post_id 啦!
你再试试运行代码,应该就能正常执行 attach 操作了 😊
内容的提问来源于stack exchange,提问作者Code-Me-A-Unicorn
相关产品推荐
相关产品推荐

