在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来使字符串更加独特。
答案 0 :(得分:0)
要么这样做:
public function store()
{
$appointment = Appointment::create(
array_merge(
Request::all(),
['my_generated_string' => uniqid()]
)
);
return redirect('appointments/'.$appointment->id );
}
或覆盖Appointment
上的创建方法:
class Appointment extends Model
{
public static function create(array $attributes)
{
return parent::create(
array_merge(
$attributes,
['my_generated_string' => uniqid()]
)
);
}
}