sql - Laravel Eloquent 连接表和计数相关

标签 sql join laravel-4 eloquent

考虑到以下表结构,我如何将 join 与 Eloquent 一起使用:

我有一个属性表

---------------------
ID    | Name 
---------------------
1     | Property Name

比我有房间
----------------------
RoomID | Property
----------------------
A-212  | 1
---------------------- 
F-1231 | 1

这里属性是外键
比我想得到所有的属性(property)并计算他们有多少个房间

检索所有的查询看起来像
   class PropertiesRepository extends EloquentBaseRepository implements PropertiesInterface
{

    use TaggableRepository;

    /**
     * Construct 
     * @param Properties $properties 
     */
    public function __construct( Properties $properties )
    {
        $this->model = $properties;
    }
     /**
     * Get all properties joining rooms
     * @return Properties
     */
    public function getAll()
    {
        return $this->model->get();
    }
}

如何扩展此查询以获得所需的结果?

最佳答案

这更像是一个 MySQL join+group+select 技巧,其中包括以下步骤。

  • 加入你的关系表(如果你想用 join 排除行,请使用 RoomsCount=0 ,否则使用 leftJoin )
  • 使用 groupBy通过 primaryKey 以避免重复连接。
  • 选择 count连接表
  •     $this->model->leftJoin('Rooms', 'Properties.ID', '=', 'Rooms.Property')
          ->selectRaw('Properties.*, count(Rooms.RoomID) as RoomsCount')
          ->groupBy('Properties.ID')
          ->get();
    

    关于sql - Laravel Eloquent 连接表和计数相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24648554/

    相关文章:

    c++ - ASCII 艺术 - 按亮度级别对 ASCII 字符数组进行排序 (C/C++)

    Mysql引用并选择进入

    mysql - 非常困难的 SQL 查询合一(mysql)

    hadoop - 在 Mapreduce/Hadoop 中加入两个数据集

    laravel - "Not"验证规则中的运算符

    mysql - 在 mysql 中获取 SQL 代理

    sql - 关于重复数据删除软件的建议?

    r - 内部连接完全在一列上,而在另一列上模糊

    php laravel 如何插入外键

    php - 在 Laravel 4 中删除工作人员之外的队列作业?