Laravel-扩展与orderBy的关系无法正常工作

时间:2019-01-09 09:56:27

标签: laravel eloquent laravel-query-builder

我有此代码:

$query = $platform->challenges();
// return response()->json($query);
$challenges = $query->orderBy('start_date', 'DESC')->get();
return response()->json($challenges);

如您所见,我得到了挑战关系查询构建器,并且试图按日期对结果进行排序。如果我取消注释第二行,则会得到2个项目数组。但是,如果我将orderBy添加到构建器中,我只会得到1个项目数组。

有什么我想念的吗?

编辑

型号代码:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use GeneaLabs\LaravelModelCaching\Traits\Cachable;

class Platform extends Model
{
    use Cachable;

    protected $fillable = ['name', 'connection_key', 'code', 'enabled'];

    public function brands()
    {
        return $this->hasMany('App\Models\Brand');
    }

    public function challenges()
    {
        return $this->hasMany('App\Models\Challenge');
    }
}

也许是可教的特质在这里造成了不良行为?

3 个答案:

答案 0 :(得分:0)

尝试此操作(使用提取的集合):

$challenges = $platform->challenges->sortByDesc('start_date');
return response()->json($challenges);

或者这个(使用查询生成器):

$platform->disableCache(); 
$challenges = $platform->challenges()->orderBy('start_date')->get();

从文档中

特定型号的手动冲洗

您可以使用以下artisan命令刷新特定模型的缓存:

php artisan modelCache:clear --model=App\Model

这在手动进行数据库更新时非常有用。您还可以从Laravel应用程序外部的源对数据库进行更新后触发此操作。

答案 1 :(得分:0)

试试这个..

$query = $platform->challenges();
$challenges = $query->orderBy('start_date', 'DESC')->get();
return json_encode($challenges);

答案 2 :(得分:0)

您是否有一个名为“ start_date”的列,如果没有,为什么不这样做

$challenges = $query->orderBy('created_at', 'DESC')->get();

因为您已经具有created_at列