拉拉维尔 |无法将多个关键字映射以返回组合结果 |找不到类“App\Http\Controllers\API\Post”

Posted

技术标签:

【中文标题】拉拉维尔 |无法将多个关键字映射以返回组合结果 |找不到类“App\\Http\\Controllers\\API\\Post”【英文标题】:Laravel | Unable to get multiple keywords mapped to return combined results | Class 'App\Http\Controllers\API\Post' not found拉拉维尔 |无法将多个关键字映射以返回组合结果 |找不到类“App\Http\Controllers\API\Post” 【发布时间】:2020-12-17 22:44:50 【问题描述】:

问题:

我试图在单个查询中搜索多个关键字,但由于某种原因,我总是收到此错误:

[2020-08-29 03:50:02] development.ERROR: Class 'App\Http\Controllers\API\Post' not found "exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): Class 'App\\Http\\Controllers\\API\\Post' not found at /home2/examplehat/public_html/shopper/app/Http/Controllers/API/ClassifiedSearchAPIController.php:78)
[stacktrace]

这是我的控制器的索引函数:

    public function index(Request $request)
     
      
     
        try
            $this->productRepository->pushCriteria(new RequestCriteria($request));
            $this->productRepository->pushCriteria(new LimitOffsetCriteria($request));
            $this->productRepository->pushCriteria(new ProductsOfFieldsCriteria($request));
            if($request->get('trending',null) == 'week')
                $this->productRepository->pushCriteria(new TrendingWeekCriteria($request));
            
            else
                $this->productRepository->pushCriteria(new NearCriteria($request));
            

          $queryString = $request->query;
  
        if ($queryString = $request->query('search')) 
       //     [$column, $term] = explode(':', $queryString);

       $terms = explode(" ", request('q'));

$products = Product::query()
    ->whereHas('store', function ($query) use ($terms) 
        foreach ($terms as $term) 
            // Loop over the terms and do a search for each.
            $query->where('name', 'like', '%' . $term . '%');
        
    )
  
    ->get();
  

else
        
           $products = $this->productRepository->all(); 
    
       
         catch (RepositoryException $e) 
            return $this->sendError($e->getMessage());
        

        return $this->sendResponse($products->toArray(), 'Products retrieved successfully');
    

有人可以帮我理解需要做什么来修复所述错误吗?我试过use App\Post;,但没有帮助。

【问题讨论】:

使用完整的命名空间$products = \App\Post::query().... 试过这个。日志中仍然存在相同的错误..日志说:[2020-08-29 04:11:01] development.ERROR: Class 'App\Post' not found "exception":"[object] (Symfony\\Component\ \Debug\\Exception\\FatalThrowableError(代码: 那么您在哪里创建了您所指的Post 模型?你在哪个命名空间中定义的? @lagbox :我在文件夹中的任何地方都看不到 Post 模型。我不是很熟悉.. 我应该像***.com/questions/39593645/class-app-post-not-found 中指定的那样创建一个吗?请原谅我的无知,我只是 Laravel 的初学者 那么你怎么知道要使用这个Post 模型呢?它应该是什么,它来自哪里?你必须有一些理由来引用它......这是一个错字吗?你实际上指的是你已经注释掉的Product模型? :) 【参考方案1】:

你需要在控制器和模型中使用命名空间

控制器:

namespace App\Http\Controllers;

use App\Post;

型号:

namespace App;

名称空间允许您通过以下方式将代码划分为逻辑组 将它们定义到自己的“命名空间”中。后面的文本字符串 "namespace" 关键字标识名称空间和它下面的所有代码 然后生活在该名称空间中。命名空间也提供了一种方法 组接口函数和常量。

你可以阅读更多关于namespace的信息。

希望这适用于您的情况!

【讨论】:

我仍然得到 [2020-08-29 04:07:14] development.ERROR: Class App\Models\Product 不存在 "exception":"[object] (ReflectionException(code: -1): 类 App\\Models\\Product 在日志中执行 n.. 你认为有什么问题? 对命名空间的快速解释可以帮助改进这个答案

以上是关于拉拉维尔 |无法将多个关键字映射以返回组合结果 |找不到类“App\Http\Controllers\API\Post”的主要内容,如果未能解决你的问题,请参考以下文章

附加了一个访问器但资源有多个,这怎么可能? - 拉拉维尔

无法访问 ServiceProvider 中的 config() |拉拉维尔

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

拉拉维尔。如何判断ORM的结果

如何在 json 响应中发送多个参数? (拉拉维尔)

如何测试调用 API 的方法? (拉拉维尔)