У меня есть такой код:
$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');
}
}
Может быть, здесь плохое поведение вызвана особенностью cachable?
Это весь код метода контроллера ... или вам тоже нужна модель?
не могли бы вы, пожалуйста?
да @LordVermi, также поделитесь кодом вашей модели ...
Я только что добавил код модели






Попробуйте это (используя полученные коллекции):
$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.
Это, конечно, работает, но есть проблема. Он добавляет индекс к каждому элементу в массиве ["0": {...}, "1": {...}]. Несмотря на то, что это работает, я пытаюсь понять, почему построитель запросов не работает должным образом, ваше решение работает с окончательной коллекцией и сортировкой массивов.
Если вы подозреваете, что это система кеширования, сначала отключите ее для этого конкретного запроса: $challenges = $platform->disableCache()->challenges()->orderBy('start_date', 'DESC')->get();.
Вы правы, я только что сделал, и это тоже работает. Возможно, мне нужно очистить кеш перед вызовом этого API.
Call to undefined method GeneaLabs\LaravelModelCaching\CachedBuilder::challenges()Это код, добавьте его в свой ответ $platform->disableCache(); $query = $platform->challenges(); $challenges = $query->orderBy('start_date')->get();
Добавил к ответу;)
Нет необходимости болтать, все готово и работает, спасибо большое.
Попробуй это ..
$query = $platform->challenges();
$challenges = $query->orderBy('start_date', 'DESC')->get();
return json_encode($challenges);
Я не вижу разницы в своем коде, только тип ответа. Но я попытаюсь.
у вас есть столбец с именем "start_date", если нет, почему бы не сделать что-то вроде этого
$challenges = $query->orderBy('created_at', 'DESC')->get();
поскольку у вас уже есть столбец created_at
вы можете поделиться своим кодом здесь?