【发布时间】:2016-10-31 14:13:49
【问题描述】:
所以这有点奇怪......在 Laravel 5.2 中,我试图从会话数据库表中检索 id。我正在使用 Artisan 生成的默认 Sessions 迁移。
Session.php(会话模型,这就是我的全部):
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Session extends Model
{
protected $table = 'sessions';
}
如果我使用$sessions = Session::where('user_id', Auth::user()->id)->get(); 并使用dd($sessions); 查看嵌套数组,则会显示完整的ID;例如402de1fd4c6f3a9bda5d4f4c5980e5748dcddbde。但是,当我这样做时
foreach($sessions as $session) {
$id = $session->id;
}
dd($id); 只截断字符串中任何字母之前的第一个数字;在这个例子中402。如果没有初始数字,则返回0。
有什么理由会发生这种情况吗?不幸的是,由于在运行 dd 之前我没有进行任何操作,所以我无法弄清楚这个字符串发生了什么。
【问题讨论】:
-
你能发布你的
Session模特吗? -
@z3r0ck 当然,我更新了我的问题。
-
我最初的想法是模型中可能存在类型转换。但事实并非如此。我不确定为什么会发生这种情况,但是您获得的值的行为就像它被强制转换为
int。尝试将其添加到您的模型中。protected $casts = [ 'id' => 'string', ]; -
@z3r0ck 有趣,这很有效。谢谢!我想知道导致这种情况的 Laravel 代码库背后发生了什么?还是可能是某种奇怪的 PHP 错误?
-
在幕后,laravel 似乎将所有
id属性转换为int。
标签: php laravel session eloquent