You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Eloquent按关联模型字段排序报错及排序无效问题

问题描述

我想基于listing_packages.order字段对listing_data进行降序排序,初始查询语句如下:

ListingData::with(['listing_package'])->orderBy('listing_package.order','desc')->paginate(24);

执行后返回错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'listing_package.order' in 'order clause'

相关模型代码:
ListingData.php

public function listing_package(): BelongsTo
{
    return $this->belongsTo(ListingPackage::class);
}

ListingPackage.php

public function listing_data(): HasMany {
    return $this->hasMany(ListingData::class);
}

我还尝试了以下写法,但数据并未按预期排序:

$relations = [
    'district',
    'regency',
    'province',
    'category',
    'type',
    'rentType',
    'listing_package' => function ($q){
        $q->orderBy('order','DESC');
    },
];
$listings = ListingData::with($relations)
->latest()
    ->paginate(24);

请问我哪里遗漏了?


解决方案

错误原因

  1. 初始写法问题:直接用orderBy('listing_package.order')无效,因为你没关联listing_packages表,Eloquent不会自动将关联模型名转换为数据库表名,SQL自然找不到对应字段。
  2. 第二种写法问题:在with()里给listing_package加排序,只会对每个ListingData关联的套餐数据内部排序,完全不影响ListingData本身的排列顺序;再加上后面的latest()是按主表创建时间排序,直接覆盖了你要的规则。

正确写法

方法一:手动关联表后排序

通过join关联listing_packages表,指定排序字段:

ListingData::with(['listing_package', 'district', 'regency', 'province', 'category', 'type', 'rentType'])
    ->join('listing_packages', 'listing_data.listing_package_id', '=', 'listing_packages.id')
    ->orderBy('listing_packages.order', 'desc')
    ->select('listing_data.*') // 避免表字段冲突,仅获取主表数据
    ->paginate(24);

注意:确认listing_data表的外键是listing_package_id(如果不是,替换为实际外键名称),select('listing_data.*')可防止主表与关联表有同名字段时出现数据混乱。

方法二:用Eloquent关联排序(Laravel 8+适用)

Laravel 8及以上版本支持直接通过关联关系指定排序字段,写法更简洁:

ListingData::with(['listing_package', 'district', 'regency', 'province', 'category', 'type', 'rentType'])
    ->orderByDesc('listing_package.order')
    ->paginate(24);

这种写法Laravel会自动处理表关联与字段拼接,无需手动写join。

注意事项

  • 若使用Laravel 7或更早版本,只能采用方法一的join写法。
  • 确认listing_packages表确实存在order字段,无拼写错误。

内容的提问来源于stack exchange,提问作者Raden Bagus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 15:52:47