2014-09-01 16 views
13

Si tratta di una tabella di migrazione da https://github.com/lucadegasperi/oauth2-server-laravellaravel Eloquente dopo salvare id diventa 0

Nella tabella oauth_clients, il tipo di dati di campo di id è varchar (40), non int.

$name = Input::get('name'); 
$id = str_random(40); 
$secret = str_random(40); 

$client = new oauthClient; 
$client->name = $name; 
$client->id = $id; 
$client->secret = $secret; 
$client->save(); 

Dopo il salvataggio(); $ client-> id diventa '0', non la stringa che ho assegnato.

Ciò rende impossibile il salvataggio della seguente tabella delle relazioni.

$endpoint = new OauthClientEndpoint(array('redirect_uri' => Input::get('redirect_uri)); 
$client->OauthClientEndpoint()->save($endpoint); 

ho controllato il $client->id: dopo il salvataggio, diventa 0 e ottengo un errore compreso questo:

(SQL: insert into `oauth_client_endpoints` (`redirect_uri`, `client_id`, `updated_at`, `created_at`) values (http://www.xxxxx.com, 0, 2014-09-01 11:10:16, 2014-09-01 11:10:16)) 

ho salvato manualmente un endpoint per impedire questo errore, per ora. Ma come posso risolvere questo problema?

Ecco il mio modello:

class OauthClient extends Eloquent { 

    protected $table = 'oauth_clients'; 

    public function OauthClientEndpoint(){ 
    return $this->hasOne('OauthClientEndpoint', 'client_id', 'id'); 
    } 

} 

class OauthClientEndpoint extends Eloquent { 

    protected $table = 'oauth_client_endpoints'; 
    protected $fillable = array('redirect_uri'); 

    public function OauthClient(){ 
    return $this->belongsTo('OauthClient', 'client_id', 'id'); 
    } 

} 

class CreateOauthClientsTable extends Migration { 
    public function up() { 
    Schema::create('oauth_clients', function (Blueprint $table) { 
     $table->string('id', 40); 
     $table->string('secret', 40); 
     $table->string('name'); 
     $table->timestamps(); 

     $table->unique('id'); 
     $table->unique(array('id', 'secret')); 
    }); 
    } 

    public function down() { 
    Schema::drop('oauth_clients'); 
    } 
} 

class CreateOauthClientEndpointsTable extends Migration { 
    public function up() { 
    Schema::create('oauth_client_endpoints', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('client_id', 40); 
     $table->string('redirect_uri'); 

     $table->timestamps(); 

     $table->foreign('client_id') 
     ->references('id')->on('oauth_clients') 
     ->onDelete('cascade') 
     ->onUpdate('cascade'); 

    }); 
    } 

    public function down() { 
    Schema::table('oauth_client_endpoints', function ($table) { 
     $table->dropForeign('oauth_client_endpoints_client_id_foreign'); 
    }); 

    Schema::drop('oauth_client_endpoints'); 
    } 
} 
+0

Puoi pubblicare il tuo modello oauthClient? – JofryHS

+0

si prega di fornire il modello del cliente che hai creato – lagbox

+0

I modelli aggiunti che ho creato. –

risposta

27

Quando si impostano il proprio ID e non utilizza auto_increment essere sicuri di aggiungere public $incrementing = false; a quel modello. Nel tuo caso si desidera:

class OauthClient extends Eloquent { 

    public $incrementing = false; 
    protected $table = 'oauth_clients'; 

    public function OauthClientEndpoint(){ 
    return $this->hasOne('OauthClientEndpoint', 'client_id', 'id'); 
    } 

} 

Questo è un piccolo blocco rosso nella enorme documentazione laravel:

Nota: in genere, i vostri modelli eloquenti avranno le chiavi di auto-incremento. Tuttavia, se si desidera specificare le proprie chiavi, impostare la proprietà di incremento sul modello su false.

+1

Grazie mille! Ho appena passato 2 ore a pensare a quello che stavo facendo male. – Notflip

Problemi correlati