考虑到以下表结构,我如何将 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 )0x2143994
  • 通过 primaryKey 使用 groupBy 以避免重复连接。
  • 选择连接表
  • 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/

    10-16 23:07