解决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学习之PHP运算符
Oct 09 PHP
DISCUZ 论坛管理员密码忘记的解决方法
May 14 PHP
Windows IIS PHP 5.2 安装与配置方法
Jun 08 PHP
php将数据库中所有内容生成静态html文档的代码
Apr 12 PHP
php中去除所有js,html,css代码
Oct 12 PHP
php设计模式之命令模式使用示例
Mar 02 PHP
使用PHP实现下载CSS文件中的图片
Dec 06 PHP
CI(CodeIgniter)模型用法实例分析
Jan 20 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
May 08 PHP
php进行md5加密简单实例方法
Sep 19 PHP
laravel 字段格式化 modle 字段类型转换方法
Sep 30 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适配器模式(Adapter)
2014/11/25 PHP
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
jQuery的运行机制和设计理念分析
2011/04/05 Javascript
关于火狐(firefox)及ie下event获取的两种方法
2012/12/27 Javascript
jquery 表格的增行删行实现思路
2013/03/21 Javascript
『jQuery』.html(),.text()和.val()的概述及使用
2013/04/22 Javascript
javascript数组操作总结和属性、方法介绍
2014/04/05 Javascript
js中回调函数的学习笔记
2014/07/31 Javascript
jquery+easeing实现仿flash的载入动画
2015/03/10 Javascript
jQuery的框架介绍
2016/05/11 Javascript
js实现上传文件添加和删除文件选择框
2016/10/24 Javascript
基于jQuery实现弹幕APP
2017/02/10 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
利用node.js本地搭建HTTP服务器
2017/04/19 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
Vue中的Props(不可变状态)
2018/09/29 Javascript
webpack中的模式(mode)使用详解
2020/02/20 Javascript
Python字典简介以及用法详解
2016/11/15 Python
从头学Python之编写可执行的.py文件
2017/11/28 Python
Python实现的个人所得税计算器示例
2018/06/01 Python
python3实现磁盘空间监控
2018/06/21 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
2019/02/21 Python
python 按钮点击关闭窗口的实现
2020/03/04 Python
网易微博Web App用HTML5开发的过程介绍
2012/06/13 HTML / CSS
纽约现代艺术博物馆商店:MoMA STORE(室内家具和杂货商品)
2016/08/02 全球购物
购买限量版收藏品、珠宝和礼品:Bradford Exchange
2016/09/23 全球购物
H&M旗下高端女装品牌:& Other Stories
2018/05/07 全球购物
师范毕业生自荐信
2013/10/17 职场文书
软件项目开发计划书
2014/05/01 职场文书
教师党的群众路线教育实践活动个人整改措施
2014/11/04 职场文书
导游词开场白
2015/01/31 职场文书
《鸡兔同笼》教学反思
2016/02/19 职场文书
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
2021/06/22 Python
javascript代码简写的几种常用方式汇总
2021/08/23 Javascript
java如何实现获取客户端ip地址的示例代码
2022/04/07 Java/Android
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技