调用未定义的方法 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->input('search');
; $search
和 $this->search
未定义。这是基本的 PHP 变量。此外,不要从 *** 逐字复制代码并期望它能够工作;先看一下,然后使用能够识别这些问题的 IDE。
你没有将$devices
传递给视图,所以它当然是未定义的。 return view('search.index', ['search' => $search, 'devices' => $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() [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
未调用自定义 UIButton 的 setIsSelected 方法
调用未定义的方法 Cake\ORM\Entity::query() CakePhp