У меня есть несколько предметов, которые называются постерами с журналами. Я хочу заказать эти плакаты по дате создания этих журналов.
У меня есть модель под названием Плакат с этим кодом:
class Poster extends Model {
protected $table = 'posters';
public function pos_log_resumenEnviado()
{
return $this->hasMany('App\models\PosterLog', 'pos_id')->where('log', 'Autores de poster enviado')->orWhere('log', 'Resumen de poster modificado')->latest();
}
Затем в моем контроллере я получаю результаты, как это:
$posters = Poster::with('pos_log_resumenEnviado', 'user')->where('state', 'Resumen pendiente de aceptacion')->get();
$posters = $posters->sortBy(function($pos)
{
if( sizeof($pos->pos_log_resumenEnviado) > 0)
return $pos->pos_log_resumenEnviado[0]->created_at;
})->take(1200);
Я получаю все плакаты, а затем заказываю их и беру первые 1200 результатов. Это работает нормально (с низкой производительностью), но теперь я получаю ошибку php, которую я сказал в названии. Ошибка приходит еще до Сортировать по исполнение, только с получить()
Если бы мне не пришлось использовать Сортировать по Я мог бы использовать постраничной () метод, но я не знаю, есть ли другой способ заказать это.
Вот правильный запрос, который вы должны использовать
Сначала используйте где сначала исключить ненужные записи, а затем внутри функции обратного вызова with вы можете отфильтровать результаты, используя eloquent:
$posters = Poster::where('state', 'Resumen pendiente de aceptacion')->with(['pos_log_resumenEnviado' => function($q){
return $q->orderBy('poster_logs.created_at','ASC');
}])->with('user')->get();
Других решений пока нет …