解决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中的加密功能
Oct 09 PHP
计算php页面运行时间的函数介绍
Jul 01 PHP
PHP打开和关闭文件操作函数总结
Nov 18 PHP
php实现MySQL数据库备份与还原类实例
Dec 09 PHP
php字符串替换函数substr_replace()用法实例
Mar 17 PHP
从性能方面考虑PHP下载远程文件的3种方法
Dec 29 PHP
PHP中抽象类、接口的区别与选择分析
Mar 29 PHP
CI框架中类的自动加载问题分析
Nov 21 PHP
关于php几种字符串连接的效率比较(详解)
Feb 22 PHP
PHP对称加密算法(DES/AES)类的实现代码
Nov 14 PHP
PHP实现函数内修改外部变量值的方法示例
Dec 28 PHP
PHP文件后缀不强制为.php方法
Mar 31 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
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
php中DOMElement操作xml文档实例演示
2013/03/26 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
2015/04/17 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
2016/11/17 PHP
阿里云的WindowsServer2016上部署php+apache
2018/07/17 PHP
PHP设计模式之组合模式定义与应用示例
2020/02/01 PHP
CSS(js)限制页面显示的文本字符长度
2012/12/27 Javascript
动态添加option及createElement使用示例
2014/01/26 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
javascript 闭包详解
2015/02/15 Javascript
在浏览器中打开或关闭JavaScript的方法
2015/06/03 Javascript
jQuery实现的超酷苹果风格图标滑出菜单效果代码
2015/09/16 Javascript
jquery mobile开发常见问题分析
2016/01/21 Javascript
ThinkJS中如何使用MongoDB的CURD操作
2016/12/13 Javascript
基于JS实现仿百度百家主页的轮播图效果
2017/03/06 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
2017/12/05 jQuery
vue移动UI框架滑动加载数据的方法
2018/03/12 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
2018/06/25 Javascript
vue项目刷新当前页面的三种方法
2018/12/04 Javascript
JS代码检查工具ESLint介绍与使用方法
2020/02/04 Javascript
[56:29]Secret vs Optic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[03:12]完美世界DOTA2联赛PWL DAY7集锦
2020/11/06 DOTA
python读写文件操作示例程序
2013/12/02 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
2020/02/27 Python
Python字符串查找基本操作代码案例
2020/10/27 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
Skip Hop官网:好莱坞宝宝挚爱品牌
2018/06/17 全球购物
英国电器零售商:PRC Direct
2018/06/21 全球购物
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
党员干部一句话承诺
2014/05/30 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
新郎父亲婚礼致辞
2015/07/27 职场文书
贴吧吧主申请感言
2015/08/03 职场文书
Python编写nmap扫描工具
2021/07/21 Python