解决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 相关文章推荐
adodb与adodb_lite之比较
Dec 31 PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
Apr 26 PHP
php递归使用示例(php递归函数)
Feb 14 PHP
PHP CURL 内存泄露问题解决方法
Feb 12 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
Dec 17 PHP
php安装ssh2扩展的方法【Linux平台】
Jul 20 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
Nov 04 PHP
Laravel用户授权系统的使用方法示例
Sep 16 PHP
swoole_process实现进程池的方法示例
Oct 29 PHP
PHP命名空间简单用法示例
Dec 28 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
Jun 03 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
Jul 12 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不用递归实现无限分级的例子分享
2014/04/18 PHP
php实现头像上传预览功能
2017/04/27 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
Yii框架日志记录Logging操作示例
2018/07/12 PHP
jquery控制listbox中项的移动并排序的实现代码
2010/09/28 Javascript
js如何取消事件冒泡
2013/09/23 Javascript
框架页面高度自动刷新的Javascript脚本
2013/11/01 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
JS控制一个DIV层在指定时间内消失的方法
2014/02/17 Javascript
jquery读取xml文件实现省市县三级联动的方法
2015/05/29 Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
2016/09/02 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
微信小程序 转发功能的实现
2017/08/04 Javascript
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
2018/08/12 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
[02:20]DOTA2英雄基础教程 黑暗贤者
2013/12/19 DOTA
[53:23]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
[01:35]2018年度CS GO最佳战队-完美盛典
2018/12/17 DOTA
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
pytorch 转换矩阵的维数位置方法
2018/12/08 Python
python机器人运动范围问题的解答
2019/04/29 Python
Tensorflow Summary用法学习笔记
2020/01/10 Python
Python基于QQ邮箱实现SSL发送
2020/04/26 Python
详解Python设计模式之策略模式
2020/06/15 Python
python怎么调用自己的函数
2020/07/01 Python
浅析Python模块之间的相互引用问题
2021/02/26 Python
美国睫毛、眉毛精华液领导品牌:RevitaLash Cosmetics
2018/03/26 全球购物
英国门销售网站:Green Tree Doors
2020/01/07 全球购物
美国相机和电子产品零售商:Beach Camera
2020/11/26 全球购物
网络技术专业求职信
2014/05/02 职场文书
十佳家长事迹材料
2014/08/26 职场文书
英语感谢信范文
2015/01/20 职场文书
安徽导游词
2015/02/12 职场文书
终止劳动合同通知书
2015/04/16 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
详解Flutter自定义应用程序内键盘的实现方法
2022/06/14 Java/Android