保存前返回新的 Laravel 模型 ID

S_R*_*S_R 2 php laravel laravel-5

我已经看到其他框架的类似问题,但我似乎无法找到 Laravel 的答案。

实现我的目标的最佳实践/最干净的解决方案是什么。

目前可以说我有一个名为Site.

我的站点模型有一个名为的列prefix,它只是由站点名称加上新站点 ID 生成的几个大写字母,例如,站点名称为“clare”的第 1 行变为“CLA1”,“pencet”变为“PEN2” .

我的问题是我需要新行id来生成前缀,这意味着目前我必须保存它,然后像这样重新保存它。

$site = new Sites;
$site->name = 'clare';
$site->save();
//Now that we have saved, we can use the new id to create the prefix and save again
$site->prefix = strtoupper(substr($site, 0, 3)) . $site->id;
$site->save();
Run Code Online (Sandbox Code Playgroud)

我讨厌这样一个事实,因为我需要 ID,所以在最初保存它后我必须再次重新保存它,实现此目标的最佳方法是什么?是否可以在保存之前返回新模型 ID?

我知道我可以做一些事情,比如获取所有行的计数并以这种方式获取 ID,但我通常正在寻找最好、最干净的解决方案来实现这一目标。

Mar*_*boc 6

试试这个解决方案:

站点模型:

public function getNextId() 
{

     $statement = DB::select("show table status like 'sites'");

     return $statement[0]->Auto_increment;
}
Run Code Online (Sandbox Code Playgroud)

注意:不要忘记使用“use Illuminate\Support\Facades\DB”导入数据库;

在控制器中:

$site = new Sites;
$site->name = 'clare';
$site->prefix = strtoupper(substr($site->name, 0, 3)) . $site->getNextId();
$site->save();
Run Code Online (Sandbox Code Playgroud)