Sto tentando di usare un UUID come chiave primaria utilizzando laravel 4.laravel LastInsertId con UUID PK
Non trovando molte informazioni su questo argomento ho deciso di utilizzare un trigger in MySQL per impostare la colonna id con un valore di UUID() sull'inserto.
Da quello che ho letto, ho bisogno di impostare un var nel modello di
public $incrementing = false;
Nelle mie migrazioni presentare Ho qualcosa di simile per ogni tabella:
//set default id to UUID, requires thread_stack in my.cnf to be 196k
function makeTrigger($tableName)
{
DB::unprepared('CREATE TRIGGER '.$tableName.'_trigger_id BEFORE INSERT ON '.$tableName.' FOR EACH ROW SET NEW.id = UUID()');
}
$tableName = 'sites';
Schema::create($tableName, function($table)
{
$table->string('id', 36)->primary();
$table->string('name', 50);
$table->string('development_url', 50);
$table->string('production_url', 50);
$table->boolean('launched')->default(0);
$table->string('test');
$table->timestamps();
$table->softDeletes();
});
makeTrigger($tableName);
Mentre io posso inserire un record come questo che ha un UUID, non posso restituire l'ID se $ incrementing = false è impostato nel modello.
Se rimuovo tale variabile e sto utilizzando un UUID, l'ID restituito è 0. Se utilizzo incrementi ('id') nel file di migrazione, viene restituito l'ID reale.
Sto costruendo un app che UUID per gli ID nelle specifiche, quindi sto cercando di capire se questo è possibile in laravel 4.
Se non sono in grado di ottenere che id indietro con
$user = User::create($userdata);
return $user->id;
allora come sarà usato l'id per le relazioni? (Stesso problema con $ user-> save();)
Da quello che ho capito Eloquent si aspetta un auto_incremento indietro, ma sembra che ci dovrebbe essere un modo per recuperare qualsiasi ID.
Perché non funziona?
Qualsiasi comprensione in questo settore sarebbe apprezzata, in quanto non riesco a trovare alcuna documentazione reale su questo argomento.
Sì ero lo stesso, è un peccato, perché i trigger sembrava davvero bello. – malhal