动态参数laravel
问题描述:
你好我正在试图建立一个动态的参数是从一个对象。基本上我使用我的$key
作为列名,它的$value
作为列的值。我认为这些按键对列是准确的,因为在将它传递给php之前,我已经自己设置了它。这是我的PHP代码。动态参数laravel
//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']);
我在这里要做的是做多个->where
子句,以便我可以遍历该对象。但我不确定我的代码的语法。
这里是类似的行为在JavaScript中,我已经使我分别使用$ key和$ value。
for (var i=0; i < filtered_table.length; i++){
for (var key in filtered_table[i]){
console.log(key + " -> " + filtered_table[i][key]);
}
}
你能帮助我在PHP做这样的一个类似的行为,然后用它有一个动态->where
参数?
编辑
我也遇到了问题,请参阅我的截图。
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,可结果还是很喜欢我做什么有被退回?
答
原来我可以直接用我的对象数组中where
作为searchmap在这里看到。
$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($request->filters)
->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']);
参考
Laravel - extending Eloquent where clauses depending on dynamic parameters
答
您可以将您的查询传递给foreach内的闭包。如果是这样的
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) {
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']);
答
您可以通过concat
这样做是为了使组合的动态,其中你的基本查询:
$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 .= $filtered_table->where($key, '=', $value);
}//dynamic where parameters use `concat` to make the query
$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']);
我也遇到了问题,请看看我的编辑。 :) – user827391012
我忘记了逗号对不起,再试一次 –
即使在左连接结束时没有分号,错误仍然显示。 – user827391012