Laravel Sail+MySQL8.0.32 SQL语法错误排查求助
问题分析与解决方案
你的查询触发MySQL 1064语法错误的核心原因是使用双引号包裹DB::raw的SQL字符串,导致PHP自动解析了字符串中的变量(比如properties.id里的$id)。这些未定义的变量会被替换为空字符串,直接破坏SQL结构,最终引发语法错误。
修复步骤
将DB::raw中的双引号替换为单引号,避免PHP解析SQL内部的变量:
Property::select(DB::raw(' properties.id, properties.company_id, properties.title, properties.slug, properties.neighborhood, properties.city, properties.address, properties.number, properties.property_purpose, properties.property_type, properties.total_area, properties.usefull_area, properties.bedrooms, properties.bathrooms, properties.garage, properties.sell, properties.rent, properties.administration_fee, properties.yearly_tax, property_highliteds.hightlight, companies.property_show_number, ROW_NUMBER() OVER (PARTITION BY properties.company_id ORDER BY property_highliteds.hightlight DESC, properties.created_at DESC) as row_number ')) ->leftJoin('property_highliteds', 'properties.id', '=', 'property_highliteds.property_id') // 关联高亮表 ->leftJoin('companies', 'properties.company_id', '=', 'companies.id') // 关联公司表 ->orderBy('row_number') // 按行号排序 ->with([ 'images_thumb:id,property_id,url', // 仅加载图片URL 'company:id,property_show_number', // 仅加载公司所需字段 'highlight:id,property_id,hightlight' // 通过BelongsTo加载高亮 ]) ->paginate($perPage);
额外优化建议
- 修正拼写错误:
usefull_area应为useful_area(多了一个l),property_highliteds应为property_highlighteds(少了一个i),虽然这不是本次语法错误的诱因,但可能导致后续逻辑异常。 - 移除重复数据加载:你在SELECT中已获取
companies.property_show_number,又在with('company')中重复加载该字段,可移除其中一处以优化查询性能。
内容的提问来源于stack exchange,提问作者Casa Carro
相关产品推荐
相关产品推荐

