搜索栏无法使用 laravel livewire
search bar not working using laravel livewire
这里是 livewire 的代码,每当我 运行 这段代码它没有显示我正在使用 laravel 7 和 livewire 用于这种方法。
对于控制器
<?php
namespace App\Http\Livewire;
use App\Models\brands;
use Livewire\Component;
class SearchBar extends Component
{
public $searchTerm;
public function render()
{
$searchTerm = '%'.$this->searchTerm.'%';
return view('livewire.search-bar', [
'users' => brands::where('Name', 'like', $searchTerm)->get()
]);
}
}
查看
<div>
<input type="text" placeholder="Search users..." wire:model='searchTerm'/>
<ul>
@foreach($users as $user)
<li>{{ $user->Website }}</li>
@endforeach
</ul>
</div>
我认为它应该确实有效。但如果没有,这就是我的写法。
您不需要通过 view() 函数传递变量。
<?php
namespace App\Http\Livewire;
use App\Models\brands;
use Livewire\Component;
class SearchBar extends Component
{
public $searchTerm;
public $users
public function render()
{
$searchTerm = '%'.$this->searchTerm.'%';
$this->users = brands::where('Name', 'like', $searchTerm)->get();
return view('livewire.search-bar');
}
}
我希望这能奏效,否则 livewire 安装可能有问题?
我认为您的问题是您在 Brands 模型中搜索数据库列通常为小写字母的“名称”,因此您需要改用“名称”。除非您使用大写字母命名该列,否则您需要使用小写字母。这也是我如何格式化 Livewire 组件。
<?php
namespace App\Http\Livewire;
use App\Models\Brands;
use Livewire\Component;
class SearchBar extends Component
{
public $searchTerm;
public function render() {
return view('livewire.search-bar', [
'users' => $this->users,
]);
}
public function getUsersProperty() {
$query = Brands::query()
->when($this->searchTerm, fn($query) => $query->where('name', 'like', '%'.$this->searchTerm.'%'))
->get()
return $query;
}
}
我会将实际检索 Brands 的函数隔离到另一个函数,因此它不会使您的渲染方法混乱。请注意,我没有声明 public $users
变量。当您未在组件中声明变量时,Livewire 将搜索 getVariableNameProperty()
函数并调用它。因此,在每次渲染时,您都在调用该函数而无需显式调用它,并将查询结果返回给视图。
另外请注意,模型通常是单数,除非您明确将它们创建为复数,因此您的品牌模型可以是品牌。如果你的模型恰好是Brand,你只需要将上面代码中的Brands部分改成Brand即可。同样,您在模型中使用的是小写首字母——需要大写。
这里是 livewire 的代码,每当我 运行 这段代码它没有显示我正在使用 laravel 7 和 livewire 用于这种方法。
对于控制器
<?php
namespace App\Http\Livewire;
use App\Models\brands;
use Livewire\Component;
class SearchBar extends Component
{
public $searchTerm;
public function render()
{
$searchTerm = '%'.$this->searchTerm.'%';
return view('livewire.search-bar', [
'users' => brands::where('Name', 'like', $searchTerm)->get()
]);
}
}
查看
<div>
<input type="text" placeholder="Search users..." wire:model='searchTerm'/>
<ul>
@foreach($users as $user)
<li>{{ $user->Website }}</li>
@endforeach
</ul>
</div>
我认为它应该确实有效。但如果没有,这就是我的写法。 您不需要通过 view() 函数传递变量。
<?php
namespace App\Http\Livewire;
use App\Models\brands;
use Livewire\Component;
class SearchBar extends Component
{
public $searchTerm;
public $users
public function render()
{
$searchTerm = '%'.$this->searchTerm.'%';
$this->users = brands::where('Name', 'like', $searchTerm)->get();
return view('livewire.search-bar');
}
}
我希望这能奏效,否则 livewire 安装可能有问题?
我认为您的问题是您在 Brands 模型中搜索数据库列通常为小写字母的“名称”,因此您需要改用“名称”。除非您使用大写字母命名该列,否则您需要使用小写字母。这也是我如何格式化 Livewire 组件。
<?php
namespace App\Http\Livewire;
use App\Models\Brands;
use Livewire\Component;
class SearchBar extends Component
{
public $searchTerm;
public function render() {
return view('livewire.search-bar', [
'users' => $this->users,
]);
}
public function getUsersProperty() {
$query = Brands::query()
->when($this->searchTerm, fn($query) => $query->where('name', 'like', '%'.$this->searchTerm.'%'))
->get()
return $query;
}
}
我会将实际检索 Brands 的函数隔离到另一个函数,因此它不会使您的渲染方法混乱。请注意,我没有声明 public $users
变量。当您未在组件中声明变量时,Livewire 将搜索 getVariableNameProperty()
函数并调用它。因此,在每次渲染时,您都在调用该函数而无需显式调用它,并将查询结果返回给视图。
另外请注意,模型通常是单数,除非您明确将它们创建为复数,因此您的品牌模型可以是品牌。如果你的模型恰好是Brand,你只需要将上面代码中的Brands部分改成Brand即可。同样,您在模型中使用的是小写首字母——需要大写。