programing

Larabel 5 관계를 쿼리하면 "null에서 멤버 함수 addEagerConstraints() 호출" 오류가 발생합니다.

firstcheck 2023. 1. 21. 09:57
반응형

Larabel 5 관계를 쿼리하면 "null에서 멤버 함수 addEagerConstraints() 호출" 오류가 발생합니다.

저는 심플한 사용자 관리 시스템을 구축하려고 노력해 왔지만, 관계 문의에 관해서는 계속 장애물을 향해 나아가고 있습니다.예를 들어 사용자와 역할있는데 모든 사용자와 역할에 대해 쿼리를 작성하려고 할 때마다 오류가 발생합니다.제목에 있는 것은 제가 최근에 접한 것 뿐입니다.

내 사용자 및 역할 모델은 다음과 같습니다.

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;
}

그럼 내가 뭘 놓쳤는지 말해줄 다른 눈이 필요해?

관계를 정의하는 메서드에 return 문이 없습니다.관계 정의를 반환해야 합니다.

교체하다

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');
}

함수에서 반환을 잊어버렸습니다.

작업:

$this->belongsToMany('\App\')를 반환사용자', 'fk_role_user', 'role_id', 'user_id' ;

$this->belongsToMany('\App\Role', 'fk_user_role', 'user_id', 'role_id')를 반환합니다.

함수 결과에 대해 Return을 사용해야 합니다.그렇지 않으면 Larabel은 아무런 액션 없이 해당 함수에 대해 무엇을 해야 하는지 알 수 없습니다.그냥 이렇게 쓰세요.

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

코딩을 즐겨주세요!

모델 함수 관계에 반환을 기록했는지 확인하십시오.

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

언급URL : https://stackoverflow.com/questions/31546081/laravel-5-querying-with-relations-causes-call-to-a-member-function-addeagercons

반응형