我正在尝试使用 Laravel 4 将 UUID 作为主键。
没有找到关于这个主题的太多信息,我决定在 MySQL 中使用触发器在插入时将 id 列设置为 UUID() 值。
根据我的阅读,我需要在模型中设置一个 var
public $incrementing = false;
在我的迁移文件中,每个表都有类似的内容:
//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);
虽然我可以插入这样的具有 UUID 的记录,但如果在模型中设置了 $incrementing = false,我将无法返回 ID。
如果我删除该 var 并且我使用的是 UUID,则返回的 id 为 0。如果我在迁移文件中使用 increments('id'),我会得到返回的真实 id。
我正在为规范中的 id 构建一个 UUID 的应用程序,所以我试图弄清楚这在 Laravel 4 中是否可行。
如果我无法使用该 ID 取回
$user = User::create($userdata);
return $user->id;
那么 id 将如何用于关系呢?(同样的问题使用 $user->save();)
据我了解,Eloquent 期待一个 auto_increment 回来,但似乎应该有一种方法可以让任何 id 回来。
为什么这行不通?
对此领域的任何见解都将不胜感激,因为我似乎无法找到有关该主题的任何真实文档。