Как я могу выполнить этот запрос с Laravel 5?


Как я выполнить следующее query в Laravel 5:

SELECT *, (SELECT COUNT(`anuncios`.`cat-id`)
FROM `anuncios` WHERE `anuncios`.`cat-id`=`categoria`.`cat-id`)
AS `cat-total`
FROM `categoria`
ORDER BY `cat-nome` ASC
Author: Rodrigo Rigotti, 2016-03-23

2 answers

И Это, как это с Inner Join. Но если вы хотите что-то более организованной, даже, за то, что Уоллес опубликовал.

<?php
    $anuncios = Categoria::orderBy('cat-nome')
                ->join('anuncios', 'anuncios.cat-id', '=', 'categoria.cat-id')
                ->selectRaw('*, count(anuncions.cat-id) as cat-total')
                ->get();
 2
Author: Diego Souza, 2016-03-24 18:34:33

Вы должны создать models связанных таблиц.

class Anuncio
{
     protected $table = 'anuncios';
}


class Categoria
{
      protected $table = 'categorias';
}

После этого создайте отношения Anuncio - categorias.

public function categorias()
{
     return $this->hasMany('Categoria', 'cat-id', 'cat-id');
}

И, наконец, вам не нужно count SELECT, но можно просто использовать компонент, который присутствует в Collection Laravel.

$anuncios = Anuncio::with('categorias')->get();

, Если вы используете foreach, просто сделать:

foreach($anuncios as $anuncio)
{
      echo $anuncio->categorias->count();
}

Может показаться более сложным, но я бы предпочел использовать то, что Laravel отделяет каждую таблицу, чтобы упростить повторное использование данные из базы.

 0
Author: Wallace Maxters, 2016-03-23 11:27:37