Как я могу выполнить этот запрос с 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
2
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