我使用此作为我的查询:
$fields = DB::select('select * from ? where form_master_id=?',
[$field->table_name,$field->form_master_id]);
这给了我错误:
SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以便在'附近使用正确的语法? form_master_id =?'在第1行(SQL: 从form_master_id = 101)
的文章中选择*
但是当我查看查询:select * from articles where form_master_id=101
时,它在phpmyadmin中对我来说非常适合。
答案 0 :(得分:2)
您询问的是Eloquent或Query Builder解决方案,但只讨论原始查询。
Query Builder解决方案非常简单:
DB::table($someTable)->where('form_master_id', $formMasterId)->get();
雄辩的解决方案:
$model = 'App\\' . $someModel;
$model::where('form_master_id', $formMasterId)->get();
答案 1 :(得分:1)
发生错误,因为您无法对表名进行参数化。表的名称必须是静态的,这就是您的第二个查询有效的原因。
一般来说,如果您最终需要参数化表的名称(这意味着您从某些输入中获取),那么应用程序背后的逻辑很可能是错误的。
因此,要使代码正常工作,请在WHERE
之后保留参数:
$fields = DB::select(
'select * from {$field -> table_name} where form_master_id=?',
[$field -> form_master_id]
);
答案 2 :(得分:0)
我使用原始查询动态使用我的表名:
$fields = DB::select(DB::raw("select * from $field->table_name
where form_master_id=$field->form_master_id"));