解决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使用百度翻译api示例分享
Jan 31 PHP
PHP批量删除、清除UTF-8文件BOM头的代码实例
Apr 14 PHP
PHP正则提取不包含指定网址的图片地址的例子
Apr 21 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
Jul 28 PHP
fckeditor上传文件按日期存放及重命名方法
May 22 PHP
微信红包随机生成算法php版
Jul 21 PHP
PHP数组操作简单案例分析
Oct 15 PHP
Zend Framework框架中实现Ajax的方法示例
Jun 27 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
Sep 17 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
Sep 30 PHP
php中通用的excel导出方法实例
Dec 30 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
Jan 20 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
将数字格式的计算结果转为汉字格式
2006/10/09 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
PHP去除字符串最后一个字符的三种方法实例
2017/03/01 PHP
基于Web标准的UI组件 — 树状菜单(2)
2006/09/18 Javascript
获取数组中最大最小值方法js代码(自写)
2013/08/12 Javascript
JS将秒换成时分秒实现代码
2013/09/03 Javascript
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
jQuery Validate表单验证入门学习
2015/12/18 Javascript
基于jquery实现瀑布流布局
2020/06/28 Javascript
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
详解Jquery Easyui的验证扩展
2017/01/09 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
2017/02/13 Javascript
javascript ES6中箭头函数注意细节小结
2017/02/17 Javascript
js eval函数使用,js对象和字符串互转实例
2017/03/06 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
python cx_Oracle的基础使用方法(连接和增删改查)
2017/11/19 Python
利用Python2下载单张图片与爬取网页图片实例代码
2017/12/25 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
基于Jquery和Css3代码制作可以缩放的搜索框
2015/11/19 HTML / CSS
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
UGG英国官方网站:UGG UK
2018/02/08 全球购物
Desigual英国官网:在线购买原创服装
2018/03/09 全球购物
荷兰最大的儿童服装店:The Kids Republic
2019/04/13 全球购物
应届生服务员求职信
2013/10/31 职场文书
小学教师师德感言
2014/02/10 职场文书
厨师个人自我鉴定范文
2014/04/19 职场文书
中职生自荐信范文
2014/06/15 职场文书
读书笔记格式
2015/07/02 职场文书
员工聘用合同范本
2015/09/21 职场文书
导游词幽默开场白
2019/06/26 职场文书