为什么laravel不将数字查询的引号放在varchar字段上?

时间:2019-04-02 09:51:21

标签: php laravel pdo eloquent

我有一个表格,其中包含客户供应商的详细信息。 mysql数据库中有一个customer_number字段,定义为varchar长度6。此列有一个索引。

每当我在laravel中搜索一行时,就好像laravel看到搜索条件是所有数字(例如12345)一样,因此当它生成mysql查询时,它不会在12345周围加上引号。这会导致mysql忽略索引并使用全表扫描非常慢。

示例搜索:

$RICPCS = \App\CustomerProductCategorySupplier::get()- 
>where('customer_number', $this->customer->delivery_account_no)- 
>where('category_number', $product->product_category)->first();

Laravel产生以下sql查询 描述

select * from `customer_product_category_supplier` 
where `customer_number` = 10626 and `category_number` = 140

一个mysql描述报告:

enter image description here

在我希望生成的sql读取的位置: 描述customer_product_category_supplier中的select * 其中customer_number ='10626'和category_number ='140'

mysql描述报告:

enter image description here

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用https://laravel.com/docs/5.8/eloquent-mutators#attribute-casting

将列转换为字符串

但是我认为将数字存储为int / float等会更聪明