使用Laravel 5.4和PHP 7.0 +,mysql 5.7,我有一个查询,该查询返回具有正确信息的数组。
部门模型
namespace App\models\core;
class propoffice extends \App\Model
{
protected $primaryKey = 'officeID';
}
这里是我的初始查询
$officeList=propoffice::select('officeID','xOfficeID')
->orderBy('officeID','desc')
->take(1)
->get();
有大量记录,但让我们看一下。那就是为什么我现在有take(1)。
dd($officeList)
我知道
#attributes: array:2 [▼
"officeID" => "123"
"xOfficeID" => "123"
]
#original: array:2 [▼
"officeID" => "123"
"xOfficeID" => "123"
]
运行循环
foreach($officeList as $the){
echo $the->officeID;
}
不是看到123,而是看到的OfficeID字段为0,但看到的xOfficeID字段为123。
我没有运行更改值或任何复杂事件的javascript或jquery。
数组和输出之间没有其他代码,因此它必须归结为我不直接参与的laravel / php进程。
该字段确实是其他位置的字段名称,并且值不匹配。我觉得这是根本原因,但不知道如何看待。
编辑: 我的模型将primaryKey设置为varchar的officeID。在laravel中,primaryKey可能是整数,这让我无所适从。因此原始数据很好,但是当在输出中返回值时,模型将NON-integer值突变为0
答案 0 :(得分:2)
您得到0
的原因是您的模型与表之间存在冲突
在模型中,您将officeID
设置为主键,但在表中是varchar列。这些模型期望primaryKey列为整数。
那给你错误。所以你应该
在您的办公室模型上删除受保护的$ primaryKey ='officeID'行
如果需要将字段用作主键,则使该字段为整数。
弄清楚如何将主键设置为varchar。 (不好的做法)。