ChatGPT解决这个技术问题 Extra ChatGPT

Laravel 5 使用关系查询导致“调用成员函数 addEagerConstraints() on null”错误

我一直在尝试创建一个简单的用户管理系统,但在查询关系时一直遇到障碍。例如,我有用户和角色,每当我尝试查询所有用户及其角色时,都会出现错误。标题中的只是我遇到的最新的一个。

我的用户和角色模型如下所示:

class Role extends Model
{
    public function users()
    {
        $this->belongsToMany('\App\User', 'fk_role_user', 'role_id', 'user_id');
    }
}

class User extends Model
{
    public function roles()
    {
        $this->belongsToMany('\App\Role', 'fk_user_role', 'user_id', 'role_id');
    }
}

我的两者之间多对多关系的迁移表如下所示:

public function up()
    {
        Schema::create('role_user', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->unsigned()->nullable(); //fk => users
            $table->integer('role_id')->unsigned()->nullable(); //fk => roles

            $table->foreign('fk_user_role')->references('id')->on('users')->onDelete('cascade');
            $table->foreign('fk_role_user')->references('id')->on('roles')->onDelete('cascade');
        });
    }

然后我尝试在控制器中获取所有记录及其关系:

public function index()
{
    $users = User::with('roles')->get();

    return $users;
}

所以我需要另一双眼睛来告诉我我在这里缺少什么?


j
jedrzej.kurylo

您在定义关系的方法中缺少返回语句。他们需要返回关系定义。

代替

public function roles()
{
    $this->belongsToMany('\App\Role', 'fk_user_role', 'user_id', 'role_id');
}

public function roles()
{
    return $this->belongsToMany('\App\Role', 'role_user', 'user_id', 'role_id');
}

同样对于其他阅读此问题的人来说,我需要将第二个参数从“fk_user_role”修复为“role_user”。
我现在要自杀了:浪费了几个小时,至少现在我永远不会忘记
和我一样的问题,花几个小时解决愚蠢的错误谢谢
郁闷,就是回不去了
我可以请您看一下 stackoverflow.com/questions/52149031/… 的 Laravel 加入相关问题吗?
L
Leonel Kahameni

您忘记了函数中的返回

做:

return $this->belongsToMany('\App\User', 'fk_role_user', 'role_id', 'user_id');

return $this->belongsToMany('\App\Role', 'fk_user_role', 'user_id', 'role_id');


是的,是的,这是我忘记在我的关系函数中写的。非常感谢@Leonel!
E
Enver

您需要使用 Return 作为函数的结果。如果你不这样做,Laravel 不知道在没有任何操作的情况下该函数应该做什么。就这样使用

return $this->hasOne(xxx, xx, xx);

享受你的编码!


每次我忘记返回时,<3谢谢;)
这很正常,我们通常都在这样做。 :) 别客气 !
K
Kaleemullah

确保您已在模型函数关系中写入 return。

return $this->hasMany('App\StaffShift','user_id','user_id');

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅