2014-09-01 4 views
13

Es ist eine Tabelle von https://github.com/lucadegasperi/oauth2-server-laravelLaravel Eloquent nach dem Speichern-ID 0 wird

In der Tabelle oauth_clients, die Felddatentyp-ID gewandert ist varchar (40), nicht 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(); 

Nach save(); Die ID $ client-> wird zu '0', nicht die Zeichenfolge, die ich zugewiesen habe.

Das bewirkt, dass die folgende Relationstabellen-Sicherung fehlschlägt.

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

ich die $client->id geprüft: Nach speichern, wird es 0 und ich erhalte eine Fehlermeldung einschließlich dieser:

(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)) 

ich einen Endpunkt manuell gespeichert diesen Fehler jetzt zu verhindern. Aber wie behebe ich dieses Problem?

Hier ist mein Modell:

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

Können Sie Ihr oauthClient-Modell posten? – JofryHS

+0

Bitte geben Sie das von Ihnen erstellte Kundenmodell an – lagbox

+0

Hinzugefügte Modelle, die ich erstellt habe. –

Antwort

27

Wenn Sie Ihre eigene ID setzen und nicht mit auto_increment sicher sein public $incrementing = false; zu diesem Modell hinzuzufügen. In Ihrem Fall Sie wollen:

class OauthClient extends Eloquent { 

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

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

} 

Dies ist ein winziger roter Block in der riesigen Laravel Dokumentation:

Hinweis: In der Regel Ihre Eloquent Modelle werden automatisch inkrementierende Schlüssel haben. Wenn Sie jedoch eigene Schlüssel angeben möchten, legen Sie die inkrementierende Eigenschaft für Ihr Modell auf false fest.

+1

Vielen Dank! Ich habe gerade 2 Stunden damit verbracht, darüber nachzudenken, was ich falsch mache. – Notflip