2016-09-27 2 views
0
User.php 

namespace ESP; 

use Illuminate\Auth\Authenticatable; 

use Illuminate\Database\Eloquent\Model; 

use Illuminate\Auth\Passwords\CanResetPassword; 

use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; 

use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract; 

use DB; 

class User extends Model implements AuthenticatableContract, CanResetPasswordContract 
{ 

    use Authenticatable, CanResetPassword; 

    protected $table = 'users'; 

    protected $primaryKey = 'id'; 

    public function companies(){ 
      return $this->belongsToMany('ESP\Company', 'company_user', 'user_id', 'company_id'); 
    } 

    public function scopeUsername($query, $username){ 

    return $query->where('username', '=', $username); 
    } 
} 


Company.php 

namespace ESP; 

use Illuminate\Database\Eloquent\Model; use DB; 

class Company extends Model { 

    protected $table = 'companies'; 

    protected $primaryKey = 'id'; 

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

LoginController.php 

namespace ESP\Http\Controllers\Login; 

use ESP\Http\Requests; 

use ESP\Http\Controllers\Controller; use ESP\CustomClass\LDAP\adLDAP; 

use Illuminate\Http\Request; 

use Illuminate\Support\Facades\Redirect; 

use ESP\LoginAttempts; 

use ESP\Helpers\UtilityHelper; 

use ESP\User; 

use DB; 

use Auth; 

use Session; 

use View; 

use Paginator; 

use DateTime; 

use Input; 

class LoginController extends Controller 
{ 

    private function _authenticateClient($username, $password) 
    { 
     $g = User::with('companies') 
      ->where('username', $username) 
      ->where('password', md5($password)) 
      ->get(); 
     dd($g); 
    } 
} 

오류는 다음과 같습니다.Laravel 5.1에서 5.3으로 마이그레이션 할 때 열의로드 관계에 오류가 발생했습니다.

BadMethodCallException in Builder.php line 2405: Call to undefined method Illuminate\Database\Query\Builder::companies() 

컨트롤러 호출시 로컬 범위 사용자 이름을 사용할 수 없습니다.

이 모델은 내 laravel 5.1에서 완벽하게 작동합니다. 하지만 내 코드베이스를 5.3으로 마이그레이션하려고하는 중이며,이 문제에 매달 렸습니다.

+0

변경 (인터페이스 및 특성)'User' 모델은 다음과 같습니다. https://github.com/laravel/laravel/blob/master/app/User.php –

+0

이미 사용자 모델이 변경되었습니다. 여전히 동일한 오류가 발생하는 메신저 –

+0

네임 스페이스 ESP; Authenticatable로 \ Foundation \ Auth \ User를 사용하십시오. 클래스 사용자가 인증 할 수 있음 { \t protected $ primaryKey = 'id'; \t 보호 된 $ fillable = [ '사용자 이름', '이메일', '비밀번호']; \t 보호 된 $ 가드 = [ 'id']; \t protected $ hidden = [ 'password', 'remember_token']; \t 공공 기능 회사() { return $ this-> belongsToMany ('ESP \ Company'); } \t public function components() { return $ this-> belongsTo ('ESP \ Component'); } } –

답변

0

당신은 응용 프로그램/설정/auth.php

'providers' => [ 
    'users' => [ 
     'driver' => 'eloquent', 
     'model' => App\ESP\User::class, 
    ] 
], 

은 당신이 올바르게 사용자 모델을 등록 할 확인할 수 있습니다.

+0

예. 나는 이미 그것을 검사했다. 모델은 ESP \ User :: class입니다. 왜냐하면 저는 ESP에 별명이 지정된 내 앱 네임 스페이스를 가지고 있기 때문입니다. 및 모델에 관한 한. 나는 아직 인증을 위해 AuthProvider를 사용하지 않았다. 관련 사용자를 열망하는 내 사용자 테이블의 레코드가 있으면 가져 오기만하면됩니다. 하지만 여전히 똑같은 오류가 발생합니다. 이견있는 사람? –

+0

새로운 모델을 만들려고했는데 작동합니다. 기본 사용자 모델이 제한된 것 같습니다. 기본 사용자 모델에 추가 한 모든 사용자 정의 메소드에 액세스 할 수 없습니다. –

관련 문제