Skip to content

Instantly share code, notes, and snippets.

@csprocket777
Created June 30, 2014 23:04
Show Gist options
  • Save csprocket777/d75420e2df3887830d9e to your computer and use it in GitHub Desktop.
Save csprocket777/d75420e2df3887830d9e to your computer and use it in GitHub Desktop.
Laravel Polymorphic relationship search
// MODEL SETUPS
class Record extends Eloquent{
protected $fillable = array(
"record_form",
"systemVersion",
"creator"
);
public function recordFieldValues(){
return $this->hasMany('RecordFieldValue', 'record_id', 'id');
}
}
class RecordFieldValue extends Eloquent{
public $relatedValues;
protected $fillable = array(
"record_id",
"record_field",
"data_type",
"field_label",
"value",
"related_model"
);
public function relations(){
return $this->hasMany('RecordFieldValueRelation');
}
public function recordField(){
return $this->hasOne('RecordField', 'id', 'record_field');
}
}
class RecordFieldValueRelation extends Eloquent{
protected $fillable = array(
"record_field_value_id",
"relatable_type",
"relatable_id",
"record"
);
public function relatable(){
return $this->morphTo();
}
}
class Users extends Eloquent{
protected $table = 'users';
public static $snakeAttributes = false;
protected $guarded = array('jobRolesOriginal', 'groupAssociation', 'privileges');
protected $fillable = array(
'jobRole_ids',
'lastLoginTime',
'active',
'alphaUser',
'approverID',
'betaUser',
'developmentTeam',
'isAdmin',
'isMgmt',
'isPersonnel',
'maintenanceUser',
'managerID',
'name',
'type',
'manager_AD_ID',
'user_AD_ID',
'user_AD_DEPT',
'user_AD_DN'
);
public function records(){
return $this->morphMany('RecordFieldValue', 'relatable');
}
}
// QUERY
$result = Record->whereHas("recordFieldValues", function($q) use ($filters){
$q->whereHas("relations", function($q) use ($filters){
$q->where('relatable_type', '=', 'users');
$q->whereHas('relatable', function($q) use ($filters){
$q->where('name', 'like', '"%'.strtolower($filters['searchText']).'%"');
});
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment