Laravel attach() 方法不起作用

2022-08-30 18:25:09

该应用程序具有以下模型:

Atividade.php

class Atividade extends Eloquent {
    public function intervencoes() {
        return $this->belongsToMany('Intervencao');
    }
}


百足.php

class Intervencao extends Eloquent {
    public function atividades() {
        return $this->hasMany('Atividade');
    }
}


以下代码有效:

Atividade::find($id)->intervencoes()->attach($intervencao_id);

但是,这...

Intervencao::find($id)->atividades()->attach($atividade_id);

返回一个 BadMethodCallException:

调用未定义的方法 Illuminate\Database\Query\Builder::attach()


解决方案(感谢@gnack):

我试图建立一个多对多的关系,所以只需要改变这一点......

return $this->hasMany('Atividade');

对此:

return $this->belongsToMany('Atividade');

答案 1

在此处查看 Laravel 文档:http://laravel.com/docs/eloquent#inserting-related-models

基本上,您已经为相同的两个表设置了两种不同类型的关系 - 您已经设置了多对多和一对多关系。看起来你可能想要一个多对多,所以你需要改变这一行:

return $this->hasMany('Atividade');

对此:

return $this->belongsToMany('Atividade');

这会将关系设置为多对多关系,然后支持该方法。attach()

该方法仅适用于多对多,对于其他关系,有或和(请参阅上面链接的文档)。attach()save()saveMany()associate()


答案 2

请参阅文档 Laravel 5.7

评论属于唯一帖子

class Comment extends Model
{
    /**
     * Get the post that owns the comment.
     */
    public function post()
    {
        return $this->belongsTo('App\Post');
    }
}

一个帖子可以有多个评论

class Post extends Model
{
    /**
     * Get the comments for the blog post.
     */
    public function comments()
    {
        return $this->hasMany('App\Comment');
    }

如果要更新/删除属于 To 关系时,可以使用关联/解离方法。

$post= App\Post::find(10);
$comment= App\Comment::find(3);
$comment->post()->associate($post); //update the model

$comment->save(); //you have to call save() method

//delete operation
$comment->post()->dissociate(); 

$comment->save(); //save() method

推荐