Laravel / PHP为变量显示错误的输出

时间:2018-09-03 20:03:45

标签: php mysql laravel

使用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

1 个答案:

答案 0 :(得分:2)

您得到0的原因是您的模型与表之间存在冲突

在模型中,您将officeID设置为主键,但在表中是varchar列。这些模型期望primaryKey列为整数。

那给你错误。所以你应该

  1. 在您的办公室模型上删除受保护的$ primaryKey ='officeID'行

  2. 如果需要将字段用作主键,则使该字段为整数。

  3. 弄清楚如何将主键设置为varchar。 (不好的做法)。