Property Class
class Property extends Model
{
protected $table = 'properties';
use HasFactory;
/**
* Get the Street that owns the Property
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function street(): BelongsTo
{
return $this->belongsTo(Street::class);
}
/**
* Get the Neighbourhood that owns the Property
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function neighbourhood(): BelongsTo
{
return $this->belongsTo(Neighbourhood::class);
}
}
Resident Class
class Resident extends Model
{
use HasFactory;
protected $guarded = [];
/**
* The Property that belong to the Resident
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function properties(): BelongsToMany
{
return $this->belongsToMany(Property::class);
}
}
Pivot class, PropertyResident class.
class PropertyResident extends Model
{
use HasFactory;
protected $fillable = ['property_id', 'resident_id'];
}
Use tinker to test
php artisan tinker
//To find resident id
$r=App\Models\Resident::find(1)
//To get all resident properties
$r->properties
//To count all resident properties
$r->properties->count()
//To find resident id(1) neighbourhood trough properties (many to many relationship)
$r->properties->find(5)->neighbourhood->name
//To get all resident id(1) property "property_id"
$r->properties()->pluck('property_id')
//To get distinct(*) neighbourhood
$r->properties()->distinct()->pluck('neighbourhood_id')
//To get all neighbourhood id group by neighbourhood id
$r->properties()->groupBy('neighbourhood_id')->pluck('neighbourhood_id')