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

Posted

技术标签:

【中文标题】laravel 5.2 调用未定义的方法 Illuminate\\Database\\Query\\Builder::associate()【英文标题】:laravel 5.2 Call to undefined method Illuminate\Database\Query\Builder::associate()laravel 5.2 调用未定义的方法 Illuminate\Database\Query\Builder::associate() 【发布时间】:2017-02-20 23:18:42 【问题描述】:

我使用的是 laravel 5.2,我在创建用户时遇到了这个错误。

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

这是我的 User.php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable


protected $fillable = [
    'name', 'email', 'password', 'role_id'
];

protected $hidden = [
    'password', 'remember_token',
];

public function role()

    return $this->hasOne('App\Role');


我的角色.php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Role extends Model

protected $table = "roles";

protected $fillable = [
    'name','description'
];

public function user()

    return $this->belongsTo('App\User');


这是我使用的迁移

public function up()

    Schema::create('roles', function (Blueprint $table) 
        $table->increments('id');
        $table->string('name');
        $table->string('description');
    );

    Schema::create('users', function (Blueprint $table) 
        $table->increments('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->string('password');
        $table->integer('role_id')->unsigned();
        $table->foreign('role_id')->references('id')->on('roles');
        $table->rememberToken();
        $table->timestamps();
    );

这是我正在使用的控制器代码

$role = Role::find(1);

    $user = new User();
    $user->name = "Admin";
    $user->email = "email@gmail.com";
    $user->password = bcrypt("password");
    $user->role()->associate($role);
    $user->save();

当我运行这段代码时,我得到 “调用未定义的方法 Illuminate\Database\Query\Builder::associate()” 错误

让我知道我的代码出了什么问题。

【问题讨论】:

尝试 $role = App\Role::find(1);而不是 $role = Role::find(1); 【参考方案1】:

associate() 函数用于更新belongsTo() 关系。您的role() 关系是hasOne(),这就是该方法不存在的原因。

Source

【讨论】:

【参考方案2】:

我认为你可以使用associate() 方法来关联角色,然后像下面这样改变你的关系:

return $this->hasOne('App\Role');

替换为

return $this->belongsTo('App\Role');

return $this->belongsTo('App\User');

替换为

return $this->hasOne('App\User');

希望对您有所帮助!

【讨论】:

以上是关于laravel 5.2 调用未定义的方法 Illuminate\Database\Query\Builder::associate()的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.2 单元测试错误:BadMethodCallException:调用未定义的方法 Illuminate\Database\Query\Builder::make()

未找到 Laravel 5.2 自定义包路径

Laravel 5.2 中的“PhpDebugBar 未定义”错误

使用 Laravel 5.2 的 PHPUnit 未找到自定义异常

如何修复 Laravel 5.2 中的“未定义变量:子任务”

我正在尝试为 user 和 admin 实现 laravel 5.2 多重身份验证。但是未定义身份验证用户提供程序 [] 错误给出