Primero, lamento mi pobre inglés.
Quiero obtener las vistas más altas con 5 artículos. Lo intenté, pero tengo problemas con la consulta Eloquent.

fuente de laravel

<?php
    $up = "SELECT id FROM articles WHERE id IN (SELECT id from (SELECT id FROM articles ORDER BY view_count DESC LIMIT 0,5) x)";
    $builder = new \App\Article;
    $query = $builder->selectRaw("articles.*, $up");
?>
    @forelse($query->latest() as $article)
        <img src="{{ $article->thumbnail }}" alt="{{ $article->title }}" title="{{ $article->title }}">
    @empty
        <p class="text-center text-danger">
        empty...
        </p>
    @endforelse

Resultado de la consulta de base de datos

MariaDB [test]> SELECT id FROM articles WHERE id IN (SELECT id from (SELECT id FROM articles ORDER BY view_count DESC LIMIT 0,5) x);
+------+
| id   |
+------+
| 4018 |
| 4045 |
| 3800 |
| 4011 |
| 4005 |
+------+
5 rows in set (0.00 sec)

He visto las otras publicaciones sobre este tema, pero no obtuve la solución.
Gracias por tu ayuda.

1
User8392 15 nov. 2017 a las 12:27

2 respuestas

La mejor respuesta

Primero tiene que hacer sus servicios en el controlador para limpiar las vistas y respetar el patrón MVC.

Entonces, en el controlador puedes usar Eloquent para hacer eso:

$articles = App\Article::orderBy('view_count', 'desc')
               ->take(5)
               ->get();

return view('SomeView')->withArticles($articles);

Y en SomeView.blade.php:

@forelse($articles as $article)
    <img src="{{ $article->thumbnail }}" alt="{{ $article->title }}" title="{{ $article->title }}">
@empty
    <p class="text-center text-danger">
    empty...
    </p>
@endforelse
1
Maraboc 15 nov. 2017 a las 10:05

5 artículos ordenados por vistas que solo necesita escribir en su controlador:

$articles = Article::orderBy('views', DESC)->take(5)->get();
return view('article', ['articles' => $articles
]);

En su article.blade.php:

@forelse($articles() as $article)
    <img src="{{ $article->thumbnail }}" alt="{{ $article->title }}" title="{{ $article->title }}">
@forelse
    <p class="text-center text-danger">
    empty...
    </p>
@endforelese
0
Alexandr Peters 15 nov. 2017 a las 10:05