似乎发现了一个 Laravel 的 BUG
SQLServer数据库,表结构:
class MyModel extends Model
{
protected $table = 'BS0010';
protected $primaryKey = 'BS0010000';
public $timestamps = false;
protected $fillable = ['BS0010000','BS0010007', 'BS0010W02','BS0010108','BS0010120','BS0010121'];
protected $keyType='string';
}
这个表还有一个种子数列,但不是主键,叫 BS0010W58
当对这个 Model 调用 firstOrCreate 时发现把种子数生成的事数赋值给了我的主键 BS0010000。
下面是PHP代码及日志
Log::info($new_key);
$my = static::query()
->firstOrCreate(['BS0010W02' => $openID], [
'BS0010000' => $new_key,
'BS0010007' => false,
'BS0010108' => '1',
'BS0010120' => '000030',
'BS0010121' => '10',
'BS0010301' => 32, //个人客户
]);
Log::info(var_export($my->toArray(),true));
if ($other) {
while ($k = key($other)){
$my->setAttribute($k, $other[$k]);
next($other);
}
$my->save();
}
[2019-03-13 14:59:25] local.INFO: XCX000002
[2019-03-13 14:59:25] local.INFO: array (
'BS0010W02' => 'oDdeZ5XM9yprR8oRgSAnsMh8871Y',
'BS0010000' => '94501',
'BS0010007' => false,
'BS0010108' => '1',
'BS0010120' => '000030',
'BS0010121' => '10',
)
保存时我指定了主键的值是:XCX000002
但调用后 BS0010000 变成了 94501
但这个 94501 是我的种子数列的值
碰巧因为后边的代码出错,发现我指定的主键怎么变成一个整数了。后来才查出这个整数来源于我的一个种子数列。
各这个怎么解释都说不过去吧。
本作品采用《CC 协议》,转载必须注明作者和本文链接