解决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模板页面中分页代码的解析
Feb 06 PHP
PHP curl_setopt()函数实例代码与参数分析
Jun 02 PHP
浅析PHP Socket技术
Aug 02 PHP
PHP与Java进行通信的实现方法
Oct 21 PHP
PHP 如何获取二维数组中某个key的集合
Jun 03 PHP
Yii中CGridView实现批量删除的方法
Dec 28 PHP
php similar_text()函数的定义和用法
May 12 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
Feb 17 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
Sep 04 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
PHP实现获取文件mime类型多种方法解析
May 28 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
Nov 23 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 和 XML: 使用expat函数(二)
2006/10/09 PHP
PHPMailer邮件发送的实现代码
2013/05/04 PHP
php中mysql连接方式PDO使用详解
2015/02/25 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
php原生数据库分页的代码实例
2019/02/18 PHP
Prototype PeriodicalExecuter对象 学习
2009/07/19 Javascript
jQuery 使用手册(一)
2009/09/23 Javascript
js中substring和substr的定义和用法
2014/05/05 Javascript
addEventListener 的用法示例介绍
2014/05/07 Javascript
如何提高javascript加载速度
2016/12/26 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
js之切换全屏和退出全屏实现代码实例
2019/09/09 Javascript
JS实现动态星空背景效果
2019/11/01 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
Python实现爬取逐浪小说的方法
2015/07/07 Python
Python 基础之字符串string详解及实例
2017/04/01 Python
python机器学习之神经网络(一)
2017/12/20 Python
Matplotlib 生成不同大小的subplots实例
2018/05/25 Python
Python中numpy模块常见用法demo实例小结
2019/03/16 Python
在python中修改.properties文件的操作
2020/04/08 Python
使用Nibabel库对nii格式图像的读写操作
2020/07/01 Python
解决Pycharm 运行后没有输出的问题
2021/02/05 Python
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
佳能法国商店:Canon法国
2019/02/14 全球购物
瑞士首家网上药店折扣店:McDrogerie
2020/12/22 全球购物
读书活动总结
2014/04/28 职场文书
软件售后服务方案
2014/05/29 职场文书
2014年大学学生会工作总结
2014/12/02 职场文书
天坛导游词
2015/02/02 职场文书
2016高校自主招生自荐信范文
2016/01/28 职场文书
MySQL中datetime时间字段的四舍五入操作
2021/10/05 MySQL
六个好看实用的 HTML + CSS 后台登录入口页面
2022/04/28 HTML / CSS
python中pd.cut()与pd.qcut()的对比及示例
2022/06/16 Python