首页 > 解决方案 > 关系前导零的Laravel问题

问题描述

当几个模型 id 相同但另一个具有前导零而另一个没有时,我遇到了 Laravel 关系的问题。

Product ID | Productname  
-----------|------------ 
012345     | Product A
12345      | Product B

如果在同一个查询中加载了这些关系,则只会返回第一个,而不会返回另一个。

数据库列是字符串,在 Product 模型中,我已将递增设置为 false 并将 id 属性强制转换为字符串。Laravel 的热切加载不考虑前导零吗?

我无法用前导零更改那些产品 ID。

提前致谢!

标签: laravellaravel-5.5eager-loadingleading-zero

解决方案


我只是在本地 laravel 安装上运行测试,但无法重现该问题。

您确定这不是您构建查询的方式的问题吗?因为如果在您的程序期间的任何时候$id变量被视为整数,将来转换为字符串将删除前导零。

例如,也许您从请求中获取 id:

$productId = $request->get('product_id');

此时$productId被认为是一个整数,所以如果您使用productId查询您的数据库,前导零将被删除。

您需要确保在请求的生命周期内,该变量永远不会转换为整数。

您可以使用tinker测试正确的查询,并手动获取您的产品:

Product::find('012345');
Product::find('12345');

推荐阅读