使用Laravel 5.4和PHP 7.0+,mysql 5.7有一个查询,返回一个包含正确信息的数组。
propoffice模型

namespace App\models\core;

class propoffice extends \App\Model
{
    protected $primaryKey = 'officeID';
}

这是我的第一个问题
  $officeList=propoffice::select('officeID','xOfficeID')
  ->orderBy('officeID','desc')
  ->take(1)
  ->get();

有很多记录,但让我们看看其中一个。这就是为什么我现在要拿(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,而是0代表officeID字段,但我看到的是123代表xOfficeID字段。
我没有运行javascript或jquery来更改值或进行任何复杂的操作。
在数组和输出之间没有其他代码,因此它必须归结为一些laravel/php进程,我没有直接参与其中。
所讨论的字段确实是其他地方的字段名,并且值不匹配。我觉得这是根源,但不知道如何或在哪里看。
编辑:
我让模型将primaryKey设置为officeID,即varchar。在laravel中,primaryKey应该是一个整数,这让我忘记了。所以原始数据很好,但是当在输出中返回值时,模型将非整数值变为0

最佳答案

因为你的模型和你的表之间有冲突
在您的模型中,您将0设置为主键,但在表中它是一个varchar列。模型期望primaryKey列是一个整数。
这就给了你错误。所以你也应该
删除propoffice模型上受保护的$primaryKey='officeID'行
如果需要将该字段作为主键,请将其设置为整数。
找出如何将主键设置为varchar。(坏习惯)。

10-05 21:36