Laravel Schema默认值函数

时间:2017-07-24 02:22:59

标签: mysql laravel eloquent

我希望Server模型的sid的默认值是每次运行的uniqid()函数。像这样的东西,例如

$table->string('sid')->default(uniqid);

如何实现这一结果?

3 个答案:

答案 0 :(得分:2)

您可以使用事件侦听器在模型上设置sid属性。您可以使用事件侦听器,模型观察器或模型启动函数中的闭包函数来执行此操作。

// app\Models\YourModel.php

/**
 * Define model event callbacks.
 *
 * @return void
 */
public static function boot()
{
    parent::boot();

    static::creating(function ($model) {
        $model->sid = uniqid();
    });
}

答案 1 :(得分:0)

不幸的是,MySQL需要常量作为默认值。因此,默认值必须是常量,它不能是函数或表达式。

唯一的方法是允许字段为空,并在数据库上创建记录时添加uniqid(),如下所示:

$table->string('sid')->nullable();

现在,当您将记录集sid设置为uinqid()

如果您的模型名为Table,那么

$record = new Table();
$record-> -----
--------
--------
$record->sid = uniqid();
$record->save();

这是你可以实现的方式。

<强>更新

您可以在模型中设置默认值,如下所示:

protected $attributes = array(
   'sid' => uniqid(),
);

希望你明白。

答案 2 :(得分:0)

我认为这是最简单的方式

$table->unique('sid')->index()