Laravel 为啥通过 id 获取元素不起作用

Posted

技术标签:

【中文标题】Laravel 为啥通过 id 获取元素不起作用【英文标题】:Laravel why get element by id is not workingLaravel 为什么通过 id 获取元素不起作用 【发布时间】:2022-01-10 18:02:55 【问题描述】:

当我在 Laravel 控制器中输入硬编码 id 时,我能够获取数据,但是当 我在文本框数据中输入了相同的值,但出现错误。

working Laravel controller 显示针对 id 123 的值:

public function getdata(Request $request)
    
        $files = Files::where('file_code','=','123')->first();
        return response()->json([
            'files'=> $files,      
          ], 200);
          
    

Laravel 控制器不工作:

 public function getdata(Request $request)
    
        $file_code=Files::find($request->id);
        $files = Files::where($file_code,'=','file_code')->get();
        return response()->json([
            'files'=> $files,      
          ], 200);
          
    

日志错误:

Column not found: 1054 Unknown column '' in 'where clause' (SQL: select * from `files` where `` = file_code)

查看:

<input v-model="state.file_code"  type="text" placeholder="Enter file code">

<textarea v-model="state.files.text_data" placeholder="text appear here "></textarea>

<button  @click="getdata" class="bg-green-800  rounded p-2 mb-5 text-white  " >RECEIVE</button>

获取函数:

function getdata()
   axios.get('http://127.0.0.1:8000/api/get-data',
     id: state.file_code,
   )
   .then(response=>
     state.files=response.data.files;   
   );
         

路线:

Route::get('get-data',[FilesController::class,'getdata']);

【问题讨论】:

为什么要搜索以$file_code 的值命名的列(可能是null 或对象)?没有您应该搜索的特定列吗? 我想根据 id 获取数据,例如。 123 在上面的工作控制器中完成。 我认为 $request->id 正在从视图中获取 id。 这个表/模型的主键是什么?是id 还是file_code? .... 如果第一个示例有效,为什么不删除硬编码值并使用那里的输入? 【参考方案1】:

您的问题在这里:

路线:

Route::get('get-data',[FilesController::class,'getdata']);

控制器:

$file_code=Files::find($request->id);
$files = Files::where($file_code,'=','file_code')->get();

您的路由没有指定id 变量,因此您的控制器中的$request-&gt;id 将始终为null

然后您尝试使用Files::find(null) 获取Files 对象,它也将始终返回null,即$file_codenull

然后你正在寻找另一个Files 对象Files::where(null,'=','file_code')-&gt;get();。此行将返回所有Files 对象,其中null"" 列为"file_code"

您可能想要做的是:

路线:

Route::get('get-data/id',[FilesController::class,'getdata']);

控制器:

$files = Files::find($request->id);

【讨论】:

以上是关于Laravel 为啥通过 id 获取元素不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 laravel 的 whereBetween 中不起作用

为啥 Laravel 4 CSRF 令牌不起作用?

显示功能不起作用。无法按 id 检索元素。拉拉维尔 5.8

为啥 findmany() 在这里不起作用 - Lumen/Laravel?

为啥 Laravel 中的新路线不起作用?

为啥嵌套循环在 laravel 中不起作用