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으로 마이그레이션하려고하는 중이며,이 문제에 매달 렸습니다.
변경 (인터페이스 및 특성)'User' 모델은 다음과 같습니다. https://github.com/laravel/laravel/blob/master/app/User.php –
이미 사용자 모델이 변경되었습니다. 여전히 동일한 오류가 발생하는 메신저 –
네임 스페이스 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'); } } –