Hello I am trying to build a dynamic where parameters that are from an object. Basically I am using my $key
as the column name and its $value
as the value for the column. I think the keys are accurate to the column because I have set it myself before passing it in php. Here is my php code.
//model of the request Array [Object] - contains the filter list along with their key
$filtered_table = Method::leftJoin('users', 'users.id', '=', 'methods.created_by')
->leftJoin('roles', 'roles.id', '=', 'users.role_id')
->leftJoin('types', 'types.id', '=', 'methods.type_id');
foreach ($request->filters as $key => $value) {
$filtered_table->where($key, '=', $value);
}//dynamic where parameters
$filtered_table->get([ 'users.username', 'users.id AS users_id', 'methods.*', 'methods.id AS method_id', 'methods.name AS method_name', 'roles.id AS role_id', 'roles.name AS role_name',
'types.id AS type_id_typetable', 'types.name AS type_name']);
What I am trying to do here is do multiple ->where
clauses so that I can iterate through the object. But I am not sure about the syntax of my code.
Here is similar behavior in javascript that I have made where I make use of the $key and $value separately.
for (var i=0; i < filtered_table.length; i++){
for (var key in filtered_table[i]){
console.log(key + " -> " + filtered_table[i][key]);
}
}
Could you help me do a similar behavior like that in php then use it to have a dynamic ->where
parameters?
EDIT
I have encountered a problem, see my screenshot.
public function filterDataCal(Request $request) {
//model of the request Array [Object] - contains the filter list along with their key
$filtered_table = Method::leftJoin('users', 'users.id', '=', 'methods.created_by')
->leftJoin('roles', 'roles.id', '=', 'users.role_id')
->leftJoin('types', 'types.id', '=', 'methods.type_id')
->where(function ($filtered_table) use ($request->filters) {//this is line 122
foreach ($request->filters as $key => $value) {
$filtered_table->where($key, '=', $value);
}
})
->get([ 'users.username', 'users.id AS users_id', 'methods.*', 'methods.id AS method_id', 'methods.name AS method_name', 'roles.id AS role_id', 'roles.name AS role_name',
'types.id AS type_id_typetable', 'types.name AS type_name']);
if($filtered_table) {
return $filtered_table;//data model when returned Array [Object, Object, .....]
} else {
return "";
}
}
BTW, can the results still be returned like what I did there?