调用未定义的方法 BelongsTo::attach()
Posted
技术标签:
【中文标题】调用未定义的方法 BelongsTo::attach()【英文标题】:Call to undefined method BelongsTo::attach() 【发布时间】:2020-01-06 19:16:56 【问题描述】:为什么这种关系不起作用?
我正在尝试使用 laravel 5.2、mysql、迁移和播种机关联帖子和类别。
但我得到一个错误:
调用未定义的方法 Illuminate\Database\Eloquent\Relations\BelongsTo::attach()
PostTableSeeder.php
public function run()
factory(App\Post::class, 300)->create()->each(function (App\Post $post)
$post->category()->attach([
rand(1, 5),
rand(6, 14),
rand(15, 20),
]);
);
型号:Post.php
public function category()
return $this->belongsTo(Category::class);
型号:Category.php
public function posts()
return $this->belongsTo(Post::class);
【问题讨论】:
我认为如果您想将多个类别附加到帖子中,您需要将关系定义为 belongsToMany 而不是 belongsTo 我不清楚什么属于什么,您能否在问题中添加相关表格字段? 【参考方案1】:在您的模型中定义 belongsToMany
关系
public function category()
return $this->belongsToMany(Category::class);
不要忘记为 Post
和 Category
关联添加中间数据透视表
由于您不使用 RTFM,因此这是一个完整的工作示例
PostTableSeeder.php
public function run()
factory(App\Post::class, 300)->create()->each(function (App\Post $post)
$post->categories()->attach([
rand(1, 5),
rand(6, 14),
rand(15, 20),
]);
);
Post.php
型号
public function categories()
return $this->belongsToMany('App\Category');
Category.php
型号
public function posts()
return $this->belongsToMany('App\Category');
category_post
表迁移
Schema::create('category_post', function (Blueprint $table)
$table->unsignedBigInteger('post_id');
$table->unsignedBigInteger('category_id');
);
希望这会有所帮助:)
【讨论】:
非常感谢您的回复,我在Post模型中添加了belongsToMany `` public function category() return $this->belongsToMany(Category::class); //post pertenece a una categoria ``` 但是结果是 ``` SQLSTATE[42S22]: Column not found: 1054 Unknown column 'category_id' in 'field list' (SQL: insert intocategory_post
(category_id
, post_id
) 值 (4, 1), (6, 1), (19, 1))```
嗯。不应该有has...
边和belongsTo...
边吗?还想知道@Caddy DZ 阅读后的建议:***.com/questions/21566705/…
如果没有表格,它也可能是一个 hasMany 和一个像 @ficuscr 一样的 belongsTo 建议我还不明白外键在哪里
OP 没有发布表格@porloscerros-Ψ,任何假设都可能是错误的。
我建议您阅读文档或观看 Laracasts(非赞助),这样您就不会浪费任何时间尝试自己发现东西以上是关于调用未定义的方法 BelongsTo::attach()的主要内容,如果未能解决你的问题,请参考以下文章
未调用自定义 UIButton 的 setIsSelected 方法
调用未定义的方法 Cake\ORM\Entity::query() CakePhp