解决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取进制余数函数代码
Jan 19 PHP
如何利用PHP执行.SQL文件
Jul 05 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
Jun 05 PHP
PHP中exec函数和shell_exec函数的区别
Aug 20 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
Feb 10 PHP
PHP删除指定目录中的所有目录及文件的方法
Feb 26 PHP
PHP中实现Bloom Filter算法
Mar 30 PHP
php实现将上传word文件转为html的方法
Jun 03 PHP
Smarty foreach控制循环次数的一些方法
Jul 01 PHP
PHP类型约束用法示例
Sep 28 PHP
在php7中MongoDB实现模糊查询的方法详解
May 03 PHP
PHP使用ActiveMQ实例
Feb 05 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+ajax 无刷新删除数据
2010/02/20 PHP
PHP几个数学计算的内部函数学习整理
2011/08/06 PHP
PHP实现加强版加密解密类实例
2015/07/29 PHP
PHP中TP5 上传文件的实例详解
2017/07/31 PHP
Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
2007/02/09 Javascript
extjs实现选择多表自定义查询功能 前台部分(ext源码)
2011/12/20 Javascript
JQuery对class属性的操作实现按钮开关效果
2013/10/11 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
浅谈Javascript中的函数、this以及原型
2016/10/09 Javascript
webpack常用配置项配置文件介绍
2016/11/07 Javascript
Vue.js第一天学习笔记(数据的双向绑定、常用指令)
2016/12/01 Javascript
使用jQuery实现购物车结算功能
2017/08/15 jQuery
在Vue组件上动态添加和删除属性方法
2018/02/23 Javascript
使用JSON格式提交数据到服务端的实例代码
2018/04/01 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
微信小程序getLocation 需要在app.json中声明permission字段
2020/03/03 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
使用Python编写一个简单的tic-tac-toe游戏的教程
2015/04/16 Python
django定期执行任务(实例讲解)
2017/11/03 Python
Python输出各行命令详解
2018/02/01 Python
Python开发网站目录扫描器的实现
2019/02/21 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
flask项目集成swagger的方法
2020/12/09 Python
一文读懂python Scrapy爬虫框架
2021/02/24 Python
css3实现可滑动跳转的分页插件示例
2014/05/08 HTML / CSS
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
高中军训感言1000字
2014/03/01 职场文书
大学新生军训自我鉴定
2014/03/18 职场文书
合伙经营协议书范本
2014/04/18 职场文书
职业道德模范事迹材料
2014/08/24 职场文书
义诊活动总结
2015/02/04 职场文书
2015年爱国卫生工作总结
2015/04/22 职场文书
沂蒙六姐妹观后感
2015/06/08 职场文书
小学体育组工作总结
2015/08/13 职场文书
windows下快速安装nginx并配置开机自启动的方法
2021/05/11 Servers
Spring Boot DevTools 全局配置学习指南
2022/03/31 Java/Android