解决laravel id非自增 模型取回为0 的问题


Posted in PHP onOctober 11, 2019

问题

laravel5.2 中 如果一个模型的id 为string等非自增类型时候 使用模型的find方法 会返会0

样例代码:

$a=Model::find('blcu');
 echo $a->id; //结果为0

原因查找

通过var_dump(a)发现a)发现a

["attributes":protected]=>
 array(16) {
 ["id"]=>
 string(4) "blcu"

也就是数据其实是读取出来了 只是->id取得时候 变成了0

查看Model的 getAttribute 方法,此方法指向了 getAttributeValue

public function getAttributeValue($key)
 {
  $value = $this->getAttributeFromArray($key);


  if ($this->hasGetMutator($key)) {
   return $this->mutateAttribute($key, $value);
  }


  if ($this->hasCast($key)) {
   return $this->castAttribute($key, $value); //这一行是导致数值改变的地方
  }


  if (in_array($key, $this->getDates()) && ! is_null($value)) {
   return $this->asDateTime($value);
  }

  return $value;
 }

查看 castAttribute 如果 >getCastType(‘id') 如果为int 则 (int)$value

protected function castAttribute($key, $value)
 {
  if (is_null($value)) {
   return $value;
  }

  switch ($this->getCastType($key)) { 
   case 'int':
   case 'integer':
    return (int) $value; //这一行

查看 >getCastType

protected function getCastType($key)
 {
  return trim(strtolower($this->getCasts()[$key]));
 }

getCasts

最中改变值得代码:

public function getCasts()
 {

  if ($this->getIncrementing()) { //如果Model了的$incrementing字段为True
   return array_merge([
    $this->getKeyName() => 'int', //返回id=>'int'
   ], $this->casts);
  }

  return $this->casts;
 }

结论

Model的$incrementing 默认为true

当我们使用id为 非自增的时候 laravel 会把字符串转为int 所以输出了0

解决方案

给模型生命的时候添加

public $incrementing=false; 即可解决

以上这篇解决laravel id非自增 模型取回为0 的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php判断上传的Excel文件中是否有图片及PHPExcel库认识
Jan 11 PHP
php中用socket模拟http中post或者get提交数据的示例代码
Aug 08 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
May 06 PHP
php读取mssql的ntext字段返回值为空的解决方法
Dec 30 PHP
PHP输出一个等腰三角形的方法
May 12 PHP
PHP新建类问题分析及解决思路
Nov 19 PHP
php中array_unshift()修改数组key注意事项分析
May 16 PHP
php微信开发接入
Aug 27 PHP
php微信开发之自定义菜单实现
Nov 18 PHP
PHP生成随机数的方法总结
Mar 01 PHP
关于laravel5.5的定时任务详解(demo)
Oct 23 PHP
关于PHP中interface的用处详解
Jul 26 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
Oct 11 #PHP
PHP实现单条sql执行多个数据的insert语句方法
Oct 11 #PHP
laravel 中某一字段自增、自减的例子
Oct 11 #PHP
laravel框架的安装与路由实例分析
Oct 11 #PHP
php5与php7的区别点总结
Oct 11 #PHP
laravel 关联关系遍历数组的例子
Oct 10 #PHP
laravel请求参数校验方法
Oct 10 #PHP
You might like
php下关于Cannot use a scalar value as an array的解决办法
2010/08/08 PHP
解析php获取字符串的编码格式的方法(函数)
2013/06/21 PHP
php 表单提交大量数据发生丢失的解决方法
2014/03/03 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
2014/06/23 PHP
PHP代码维护,重构变困难的4种原因分析
2016/01/25 PHP
Laravel最佳分割路由文件(routes.php)的方式
2016/08/04 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
2016/10/19 PHP
ext读取两种结构的xml的代码
2008/11/05 Javascript
JS 字符串连接[性能比较]
2009/05/10 Javascript
克隆javascript对象的三个方法小结
2011/01/12 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
一个js导致的jquery失效问题的解决方法
2013/11/27 Javascript
简介JavaScript中getUTCMonth()方法的使用
2015/06/10 Javascript
基于Bootstrap重置输入框内容按钮插件
2016/05/12 Javascript
jquery 校验中国身份证号码实例详解
2017/04/11 jQuery
AngularJS表单验证功能
2017/10/19 Javascript
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
2019/04/11 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
uniapp,微信小程序中使用 MQTT的问题
2020/07/11 Javascript
[01:55]TI9显影之尘系列 - Evil Geniuses
2019/08/22 DOTA
跟老齐学Python之折腾一下目录
2014/10/24 Python
mac下pycharm设置python版本的图文教程
2018/06/13 Python
Python3转换html到pdf的不同解决方案
2019/03/11 Python
利用python numpy+matplotlib绘制股票k线图的方法
2019/06/26 Python
Python datetime模块的使用示例
2021/02/02 Python
html5本地存储_动力节点Java学院整理
2017/07/12 HTML / CSS
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
应届毕业生通用的自荐书范文
2014/02/07 职场文书
法人代表委托书
2014/04/04 职场文书
《画风》教学反思
2014/04/16 职场文书
个人作风建设自查报告
2014/10/22 职场文书
优秀共产党员事迹材料
2014/12/18 职场文书
2015年统计员个人工作总结
2015/07/23 职场文书
教你使用vscode 搭建react-native开发环境
2021/07/07 Javascript
JPA 通过Specification如何实现复杂查询
2021/11/23 Java/Android