调用未定义的方法 App\Models\Catering::search() [关闭]

Posted

技术标签:

【中文标题】调用未定义的方法 App\\Models\\Catering::search() [关闭]【英文标题】:Call to undefined method App\Models\Catering::search() [closed]调用未定义的方法 App\Models\Catering::search() [关闭] 【发布时间】:2022-01-14 13:45:54 【问题描述】:

我正在尝试让搜索工作,但我收到此错误:BadMethodCallException 调用未定义的方法 App\Models\Catering::search()。

餐饮控制器

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Catering;

class CateringController extends Controller

    function query(Request $request)
    
        if ($request->has('search')) 
            $search = Catering::search($request->search)->get();
         else 
            $search = Catering::get();
        

        return view('search.index', [
            'search' => $search
        ]);
    

餐饮模特

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Catering extends Model

    use HasFactory;
    public $timestamps = false;

web.php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\CateringController;

Route::get('/', function () 
    return view('welcome');
);

Route::get('/search/query',[CateringController::class,'query']);

search.index

<h1>Search Catering list</h1>

<form  action="/search/query" method="GET">
  @csrf
  <input type="search" name="search" placeholder="Search...">
  <button type="submit">Submit</button>
</form>

<table border="1">
  <tr>
    <td> Id</td>
    <td> Facility name</td>
    <td> Tag</td>
    <td> Location</td>
    <td> Creation date</td>
    <td> Edit</td>
    <td> Delete</td>
  </tr>
  @foreach($devices as $device)
    <tr>
      <td> $device['id']</td>
      <td>$device['nameCatering']</td>
      <td>$device['tag']</td>
      <td>$device['location']</td>
      <td>$device['creation_date']</td>
      <td><a href="edit/".$device['id']>Click to edit</a></td>
      <td><a href="delete/".$device['id']>Click to delete</a></td>
    </tr>
  @endforeach
</table>
<br>
<br>
<a href="addCatering"><button>Make new Catering Facility</button></a>

感谢您的时间和回答。

【问题讨论】:

undefined method App\Models\Catering::search(). 告诉你Catering 中没有名为search 的函数。 Laravel 不提供该功能。 出于好奇,是否有一些您遵循的文档或教程说要使用::search()?可能有一个外部包或其他东西引入了这个功能,但默认情况下,Laravel 使用where() 来匹配查询约定。 但是在 Catering.php 中只有class Catering extends Model use HasFactory; public $timestamps = false; 那我该怎么办呢? 您必须将$search 定义为$search = $request-&gt;input('search');$search$this-&gt;search 未定义。这是基本的 PHP 变量。此外,不要从 *** 逐字复制代码并期望它能够工作;先看一下,然后使用能够识别这些问题的 IDE。 你没有将$devices 传递给视图,所以它当然是未定义的。 return view('search.index', ['search' =&gt; $search, 'devices' =&gt; $devices']),但您必须将 $devices 定义为 $devices = Catering::where(...);。请停止在 cmets 中提问,先阅读文档;所有这些都在 Laravel 中有详细记录。 【参考方案1】:

使用 laravel 模型的 orWhere 方法

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Catering;

class CateringController extends Controller

    function query(Request $request)
    
        if ($request->has('search')) 
            $search = Catering::where('name', 'LIKE', "%$request->search%")
                ->orWhere('updated_at', 'LIKE', "%$request->search%")
                ->orWhere('location', 'LIKE', "%$request->search%")
                ->orWhere('tag', 'LIKE', "%$request->search%")
                ->get();
         else 
            $search = Catering::get();
        

        return view('search.index', [
            'search' => $search
        ]);
    

【讨论】:

我现在收到一个错误:$devices 未定义。我该如何解决这个问题? 我明白了,谢谢

以上是关于调用未定义的方法 App\Models\Catering::search() [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

调用未定义的方法 BelongsTo::attach()

未调用自定义 UIButton 的 setIsSelected 方法

调用未定义的方法 Cake\ORM\Entity::query() CakePhp

致命错误:未捕获的错误:调用未定义的方法 stdClass::option();

调用类方法时出现“调用未定义函数”错误

调用未定义的方法 Illuminate\Foundation\Application::bindShared()