搜索栏无法使用 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即可。同样,您在模型中使用的是小写首字母——需要大写。