Laravel 当与模型链接的 Table 为非自动增量时,模型获得下一个增量 ID
Laravel Model get next increment ID when the Table linked with Model is Non-AutoIncrement
正如我在问题中提到的,我正在处理的当前 Laravel 6.0 项目有一些奇怪的数据库设置,其中模型的(此处为 MainModel)MySQL table 已设置AutoIncrement
为 NULL
。而且客户端根本不允许更改 Table 的定义。
我想在插入记录之前可靠地找到模型的下一个和上一个 ID(因为我无法从 table 中找到,因为 AutoIncrement 设置为 NULL),以便我可以输入相关记录(例如 testimonial/faq 或任何 WYSIWYG 内容字段的图像)首先通过将主模型的 ID 正确插入另一个 table.
目前我的主模型中有这个,但是 next
方法不能可靠地 return 始终如一地增加 ID:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Te7aHoudini\LaravelTrix\Traits\HasTrixRichText;
class [MainModel] extends Model
{
use HasTrixRichText;
protected $guarded = [];
public $timestamps = false;
protected $primaryKey = 'id';
protected $connection = '[connection1]';
protected $table = '[main_table]';
protected $fillable = ['id', '[titlefield]', '[wysiwyg_field]'];
/**
* Setup model event hooks
*/
public static function boot()
{
parent::boot();
self::creating(function ($model) {
$model->id = $model->max('id') + 1;
});
}
/**
* Get next available Faq Id
*/
public function next()
{
return ++$this->id;
}
}
感谢任何帮助...
据我了解,您对如何调用静态模型查询感到困惑。您可以通过使用静态自引用实现相同的逻辑 static
.
public static function next()
{
return static::max('id') + 1;
}
这相当于。
MainModel::max('id');
奖金使其成为交易以避免 ID 冲突。这可以以有趣的方式锁定数据库,但会避免您拥有相同的 ID,类似于此,非常简单的示例。
DB::transaction(function () {
$id= MainModel::next();
$newModel = MainModel::create(['id' => $id]);
});
据我了解,为了获得下一个增量 ID,您需要调用以下行。
Model::lastest()->第一个()
正如我在问题中提到的,我正在处理的当前 Laravel 6.0 项目有一些奇怪的数据库设置,其中模型的(此处为 MainModel)MySQL table 已设置AutoIncrement
为 NULL
。而且客户端根本不允许更改 Table 的定义。
我想在插入记录之前可靠地找到模型的下一个和上一个 ID(因为我无法从 table 中找到,因为 AutoIncrement 设置为 NULL),以便我可以输入相关记录(例如 testimonial/faq 或任何 WYSIWYG 内容字段的图像)首先通过将主模型的 ID 正确插入另一个 table.
目前我的主模型中有这个,但是 next
方法不能可靠地 return 始终如一地增加 ID:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Te7aHoudini\LaravelTrix\Traits\HasTrixRichText;
class [MainModel] extends Model
{
use HasTrixRichText;
protected $guarded = [];
public $timestamps = false;
protected $primaryKey = 'id';
protected $connection = '[connection1]';
protected $table = '[main_table]';
protected $fillable = ['id', '[titlefield]', '[wysiwyg_field]'];
/**
* Setup model event hooks
*/
public static function boot()
{
parent::boot();
self::creating(function ($model) {
$model->id = $model->max('id') + 1;
});
}
/**
* Get next available Faq Id
*/
public function next()
{
return ++$this->id;
}
}
感谢任何帮助...
据我了解,您对如何调用静态模型查询感到困惑。您可以通过使用静态自引用实现相同的逻辑 static
.
public static function next()
{
return static::max('id') + 1;
}
这相当于。
MainModel::max('id');
奖金使其成为交易以避免 ID 冲突。这可以以有趣的方式锁定数据库,但会避免您拥有相同的 ID,类似于此,非常简单的示例。
DB::transaction(function () {
$id= MainModel::next();
$newModel = MainModel::create(['id' => $id]);
});
据我了解,为了获得下一个增量 ID,您需要调用以下行。 Model::lastest()->第一个()