2016-07-19 2 views
2

$ client-> id가 Laravel 5.2에서 올바른 값을 반환하지 않는 OauthClient 모델이 있습니다.Laravel Eloquent 모델 ID가 문자열 반환 값이 잘못되었습니다.

"lucadegasperi/oauth2-server-laravel": 마이그레이션시 "^ 5.1"이 사용되었습니다. $ table-> string ('id', 40) -> primary();

그러나 블레이드 템플릿에 $ client-> id를 사용하면 다시 "0"이됩니다. dd ($ client)를 사용하면 id 속성에 올바른 값이 표시됩니다.

무엇이 잘못 될 수 있습니까? DD에서

모델의 출력()에서

OauthClient {#254 ▼ 
    #connection: null 
    #table: null 
    #primaryKey: "id" 
    #keyType: "int" 
    #perPage: 15 
    +incrementing: true 
    +timestamps: true 
    #attributes: array:7 [▼ 
    "id" => "wISw4JmlMQCCrMupjojcuDTK3k4hwtkb" 
    "secret" => "nnw3CPTzeQSIfT4KpR0d3XzWIKKoghB3" 
    "name" => "http://example.com" 
    "package" => "free" 
    "user_id" => 2 
    "created_at" => "2016-07-19 15:36:28" 
    "updated_at" => "2016-07-19 15:36:28" 
    ] 
    #original: array:7 [▶] 
    #relations: [] 
    #hidden: [] 
    #visible: [] 
    #appends: [] 
    #fillable: [] 
    #guarded: array:1 [▼ 
    0 => "*" 
    ] 
    #dates: [] 
    #dateFormat: null 
    #casts: [] 
    #touches: [] 
    #observables: [] 
    #with: [] 
    #morphClass: null 
    +exists: true 
    +wasRecentlyCreated: false 
} 

테이블 구조

CREATE TABLE `oauth_clients` (
    `id` varchar(40) COLLATE utf8_unicode_ci NOT NULL, 
    `secret` varchar(40) COLLATE utf8_unicode_ci NOT NULL, 
    `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `package` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `user_id` int(10) unsigned NOT NULL, 
    `created_at` timestamp NULL DEFAULT NULL, 
    `updated_at` timestamp NULL DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `oauth_clients_id_secret_unique` (`id`,`secret`), 
    KEY `oauth_clients_user_id_foreign` (`user_id`), 
    CONSTRAINT `oauth_clients_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 
+0

당신은 그것은 일반적이지 않습니다'DD ($ 클라이언트)' –

+0

의 출력을 게시 할 수 있습니다. 일반적으로 모든 속성은 속성 배열 내에 보관되며, 적절한 것을 얻는 마법의'__get' 메쏘드가 있습니다. 우리는 당신의'OauthClient' 모델이 어떻게 보이는지 볼 필요가 있습니다. – apokryfos

+0

추가 dd() 출력 및 테이블 구문 생성 –

답변

8

명시 적으로 달리 명시하지 않는 한 기본적으로 기본 키가 int으로 주조되어 있기 때문이다 "쇼 테이블 oauth_clients을 만들".

(int) "wISw4JmlMQCCrMupjojcuDTK3k4hwtkb" == 0 

값은 여전히 ​​문자열로 존재하지만, 당신이 $model->id을 사용하는 경우는 Illuminate\Database\Eloquent\Model 클래스에 정의 마법 __get() 방법으로 이동합니다.

id 필드를 문자열로 사용하는 것에 대해 논쟁하지 않겠지 만, 그렇게한다면 $ model-> id를 사용하여 문자열 값을 가져 오려면 모델 정의에서 문자열로 캐스팅해야합니다 . 거기에 사용할 수있는 보호 된 $ 캐스트 배열이 있습니다. 그냥 당신의 OauthClient 모델에 다음을 추가합니다

protected $casts = ['id' => 'string']; 

이 트릭을 할 대신 기본 정수의 문자열로 id 속성을 캐스팅합니다. 처음에는 id를 문자열로 사용하지 않기를 바랍니다.

업데이트 : 또한 Laravel에게, 당신의 모델 false로 설정할 수 있습니다 $incrementing 재산이

이 아닌 증가 또는 숫자가 아닌 기본 키합니다. 다음과 같이 모델에 설정하십시오.

public $incrementing = false; 
+0

대단히 감사합니다. 이 라이브러리를 사용할 때 많은 문제가 수정되었습니다! –