BadMethodCallException属于ToMany Laravel 5.4

时间:2017-05-26 15:16:32

标签: php laravel laravel-5.4

请尝试在Laravel 5.4中建立多对多的关系,但我总是得到这个错误:

  

Builder.php第2443行中的BadMethodCallException:调用undefined   方法Illuminate \ Database \ Query \ Builder :: categories()

我认为我的代码很好,我无法解决,请帮助。

感谢你。

这是我的代码:

用户模型

class User extends Model
{
    public function categories()
    {
        return $this->belongsToMany('App\Category', 'user_categorys');
    }

}

类别模型

class Category extends Model
{

    public function users()
    {
        return $this->belongsToMany('App\User', 'user_categorys');
    }

}

通话方法

$user = User::where('id',$id_user)->first();
            foreach ($request->input("idcategs") as $value) {
                $user->categories()->save($value);
            }

2 个答案:

答案 0 :(得分:1)

在使用多对多关系来附加或分离模型时,您应该使用attach()detach()sync()方法。

如果idcategs是一个ID数组,请执行以下操作:

$user = User::find($id_user);
$user->attach($request->idcategs);

如果它是一系列准备好的数据,您需要先创建类别:

$categoriesIds = [];
$user = User::find($id_user);
foreach ($request->idcategs as $value) {
    $categoriesIds[] = Category::create($value)->id;
}
$user->attach($categoriesIds);

https://laravel.com/docs/5.4/eloquent-relationships#updating-many-to-many-relationships

答案 1 :(得分:-1)

你弄错了: 如果您有多对多关系,或者您的关系应该是:

public function users()
    {
        return $this->belongsToMany('App\User', 'foreign_key');
    }

您必须定义数据透视表category_user