【发布时间】:2015-12-21 23:32:04
【问题描述】:
在 Laravel 5 的插入中自动生成唯一字符串(MD5(时间戳)或 UUID)的最简单和最简单的方法是什么。
这就是我现在拥有的。
我的店铺功能
public function store(AppointmentsRequest $request)
{
$appointment = Appointment::create(Request::all());
return redirect('appointments/'.$appointment->id );
}
我的表架构(请参阅下面的 my_generated_string 列)
public function up()
{
Schema::create('appointments', function(Blueprint $table)
{
$table->increments('id');
$table->integer('client_id')->unsigned();
$table->foreign('client_id')->references('id')->on('clients')->onDelete('cascade');
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->dateTime('appointment_at');
$table->string('my_generated_string')->unique(); --> Want a generated string in here
$table->rememberToken();
$table->timestamps();
});
}
解决方案说明
@JamesFlight 为我的问题提供了一个很好的解决方案。
uniqid() 根据当前时间(以微秒为单位)生成一个字符串(13 个字符长)。由于我的应用程序的两个用户可以(机会很小,但是..)同时创建约会,并且此列在我的数据库中必须是唯一的,因此我在生成的字符串前面添加了 user_id 前缀。由于一个用户不可能在同一微秒内创建两个约会,因此这应该足以让我的应用具有唯一性。
我的函数改为:
public static function create(array $attributes)
{
return parent::create(
array_merge(
$attributes,
['my_generated_string' => uniqid(\Auth::user()->id, true)]
)
);
}
注意:true 将通过生成 23 个字符的字符串而不是 13 个字符来使字符串更加独特。
【问题讨论】:
标签: laravel laravel-4 laravel-5