代码之家  ›  专栏  ›  技术社区  ›  Javier Torron Diaz

Laravel-扩展与orderby的关系,但未正常工作

  •  1
  • Javier Torron Diaz  · 技术社区  · 7 年前

    我有这个代码:

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

    如您所见,我得到了“挑战关系查询生成器”,并尝试按日期排序结果。如果取消对第二行的注释,将得到2个项数组。但是如果我将orderby添加到builder中,我只得到1个item数组。

    我有什么东西不见了吗?

    编辑

    型号代码:

    <?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 回复  |  直到 7 年前
        1
  •  0
  •   andcl    7 年前

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

    $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应用程序之外的源对数据库进行更新后触发此事件。

        2
  •  0
  •   Emeka Okafor    7 年前

    你有一个名为“开始日期”的栏目吗?如果没有,为什么不做这样的事情呢?

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

    因为你已经创建了“at”列

        3
  •  0
  •   piet.t Charis A.    7 年前

    试试这个…

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