Php Laravel:使用foreach时获取会话ID会奇怪地截断
所以这有点奇怪。。。在Laravel5.2中,我试图从会话数据库表中检索id。我使用Artisan生成的默认会话迁移 Session.php(会话模型,这是我的全部): 执行Php Laravel:使用foreach时获取会话ID会奇怪地截断,php,laravel,session,eloquent,Php,Laravel,Session,Eloquent,所以这有点奇怪。。。在Laravel5.2中,我试图从会话数据库表中检索id。我使用Artisan生成的默认会话迁移 Session.php(会话模型,这是我的全部): 执行dd($id)仅截断到字符串中任何字母前的第一个数字;在本例中,402。如果没有初始数字,则返回0 这有什么原因吗?不幸的是,因为在运行dd之前我没有操作任何东西,所以我无法弄清楚这个字符串是怎么回事。当您调用$session->id时,它从您的模型调用php magic method\u get,然后从该方法调用getAt
dd($id)代码>仅截断到字符串中任何字母前的第一个数字;在本例中,402
。如果没有初始数字,则返回0
这有什么原因吗?不幸的是,因为在运行dd
之前我没有操作任何东西,所以我无法弄清楚这个字符串是怎么回事。当您调用$session->id
时,它从您的模型调用php magic method\u get
,然后从该方法调用getAttribute
方法,然后从中调用getAttributeValue
getAttributeValue
它调用一些其他方法,然后检查它hasCast
然后从该方法()调用getCasts
正如您在主键中看到的,它添加了一个默认的强制转换int
,因此对于您的问题,您可以选择cast
protected $casts = [ 'id' => 'string', ];//This part is taken from the comment of z3r0ck
或者只需添加$keyType
protected $keyType = 'string';
你能发布你的会话
模型吗?@z3r0ck当然,我更新了我的问题。我最初的想法是模型中可能有类型转换。但事实并非如此。我不知道为什么会发生这种情况,但您得到的值的行为就像它被类型转换为int
。尝试将此添加到您的模型中<代码>受保护的$casts=['id'=>string',]代码>@z3r0ck很有趣,很有效。非常感谢。我想知道是什么原因导致了这一切?或者它可能是某种奇怪的PHP错误?在幕后,laravel正在将所有id
属性转换为int
。是否有$keyType
属性的文档?一个链接将是伟大的,如果有!谢谢
protected $casts = [ 'id' => 'string', ];//This part is taken from the comment of z3r0ck
protected $keyType = 'string';