调用未定义的方法 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);

不要忘记为 PostCategory 关联添加中间数据透视表

由于您不使用 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 into category_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()的主要内容,如果未能解决你的问题,请参考以下文章

调用未定义的方法 BelongsTo::attach()

未调用自定义 UIButton 的 setIsSelected 方法

调用未定义的方法 Cake\ORM\Entity::query() CakePhp

致命错误:未捕获的错误:调用未定义的方法 stdClass::option();

调用类方法时出现“调用未定义函数”错误

调用未定义的方法 Illuminate\Foundation\Application::bindShared()