How do I use join with Eloquent taking in consideration the following table structure:
I have a properies table
---------------------
ID | Name
-
Define the relationship on your Property model class:
<?php
namespace App\Models;
class Property extends Model {
public function rooms() {
return $this->hasMany(Room::class);
}
}
$properties = Property::withCount(['rooms'])->get();
This will add a rooms_count to the result.
This is more of a MySQL join+group+select trick which includes following steps.
join
if you want to exclude rows with RoomsCount=0
, else use leftJoin
)groupBy
by primaryKey to avoid duplicates of the join.count
of joined table $this->model->leftJoin('Rooms', 'Properties.ID', '=', 'Rooms.Property')
->selectRaw('Properties.*, count(Rooms.RoomID) as RoomsCount')
->groupBy('Properties.ID')
->get();