我希望我的Server
模型的sid
的默认值是每次运行的uniqid()函数。像这样的事情,例如Laravel架构默认值功能
$table->string('sid')->default(uniqid);
我怎样才能实现这个结果?
我希望我的Server
模型的sid
的默认值是每次运行的uniqid()函数。像这样的事情,例如Laravel架构默认值功能
$table->string('sid')->default(uniqid);
我怎样才能实现这个结果?
您可以使用事件侦听器在模型上设置sid
属性。您可以使用事件侦听器,模型观察器或模型引导函数中的闭包函数来完成此操作。
// app\Models\YourModel.php
/**
* Define model event callbacks.
*
* @return void
*/
public static function boot()
{
parent::boot();
static::creating(function ($model) {
$model->sid = uniqid();
});
}
不幸的是,MySQL
需要默认的常量。所以,默认值必须是一个常量,它不能是一个函数或表达式。
唯一的办法就是让田可空,并添加uniqid()
而数据库是这样创建记录:
$table->string('sid')->nullable();
现在,当您添加记录集sid
值uinqid()
值
如果你有型号名称为Table
,然后
$record = new Table();
$record-> -----
--------
--------
$record->sid = uniqid();
$record->save();
这是您可以实现的方式。
UPDATE
您可以在模型默认值,以及这样的:
protected $attributes = array(
'sid' => uniqid(),
);
希望你能理解。
谢谢!有没有一种方法可以让模型自动在:: create上做到这一点? –
@ThorCorreia我已经更新了我的答案。你可以使用$ attribute属性覆盖来实现。 –
@SagarGautam你不能在类属性的定义中调用函数。请参阅http://phpsadness.com/sad/2 –
我认为这是最简单的方法
$table->unique('sid')->index()
嗨,据我所知,这只是生成一个从1开始的数字......但这对我的应用程序来说并不明智,因为用户将自己输入这些服务器ID,并且加入某人的游戏会很容易。我没有密码保护这些服务器,所以这不好。 –
我喜欢这种方法最好。不想创建新的事件/侦听器。谢谢! –