Jen*_*ang 7 php laravel eloquent
我正在尝试根据主键从表中返回一行.
$product = Product::where('id', '=', $idOrSKU)
->orWhere('sku', '=', $idOrSKU)
->take(1)->get();
Run Code Online (Sandbox Code Playgroud)
出于某种原因$idorSKU正在转换为(int)比较之前和之前.例如,当$isOrSKU = "9dfghfd"返回ID = 9的行时.为什么是这样?它应该什么都不返回!有人可以解释一下吗?
这是相关的表格方案
| id | int(10) unsigned | NO | PRI | NULL
| name | varchar(255) | NO | | NULL
| sku | varchar(255) | NO | | NULL
Run Code Online (Sandbox Code Playgroud)
这与数据库有关,而不是 Laravel,对字符串进行类型转换。因为您正在对列进行查询int(10),所以 mySQL 会强制将您的搜索字符串更改为int,导致您的查询变为9。
我可以确认以下几点:
$test1 = Test::find('1');
echo $test1->id; // gives 1
$test2 = Test::find('1example');
echo $test2->id; // gives 1
Run Code Online (Sandbox Code Playgroud)
因此你的变量9dfghfd因为类型转换为int (9). 但如果你的变量是“df9ghfd” - 它不会被类型转换,并且不会匹配。
编辑:该问题会影响其他事物,例如路由模型绑定:
domain.com/product/1
domain.com/product/1thisalsoworks // takes you to the page of ID 1
Run Code Online (Sandbox Code Playgroud)
我已经在 Github 上开了一张票以进一步讨论它- 所以请在此处查看更多信息/讨论。
但总的来说,这个问题并不是 Laravel 的直接错误。
编辑:似乎这个问题影响了 GitHub本身:
这有效: https: //github.com/laravel/framework/issues/5254
这也是如此: https: //github.com/laravel/framework/issues/5254typecast
| 归档时间: |
|
| 查看次数: |
6503 次 |
| 最近记录: |