【问题标题】:Or with And Statement in Eloquent livewire或者在 Eloquent livewire 中使用 And 语句
【发布时间】:2021-02-11 10:06:37
【问题描述】:

我正在使用 Laravel Livewire 数据表,但在搜索时出现错误。

类 Illuminate\Database\Eloquent\Builder 的对象不能是 转成字符串

我的搜索方法是

public static function search($QUERY)
{
    return empty($QUERY) ? static::QUERY()
        : static::WHERE(function ($QUERY) {
            $QUERY->WHERE('name', 'like', '%' . $QUERY . '%')
                ->orWhere('email', 'like', '%' . $QUERY . '%');
        });
}

Livewirerender 方法

public function render()
{
    //$this->roles = ROLE::WHERE('company_id', SESSION('company_id'))->paginate(5);
    return VIEW('livewire.users', [
        'users' => USER::search($this->search)
            ->WITH(['role', 'company'])
            ->WHERE('company_id', SESSION('company_id'))
            ->orderBy($this->sortField, $this->sortAsc ? 'asc' : 'desc')
            ->paginate($this->perPage),
    ]);
}

【问题讨论】:

  • $QUERY->WHERE('name', 'like', '%' . $QUERY . '%') 这行没有意义,更改传递给search方法的参数名称,因此它与传递给闭包的参数不同,这是一个查询生成器的实例。
  • #Remul 你的意思是像这个 public static function search($query1) { return empty($query) ? static::query() : static::Where(function ($query1) { $query1->where('name', 'like', '%' . $query1. '%') ->orWhere('email' , '喜欢', '%' . $query1. '%'); }); }

标签: laravel eloquent laravel-livewire


【解决方案1】:

您可以创建一个作用域,而不是实际的方法search(),它会呈现相同的效果,但也会有一些 Laravel 魔法帮助您。

用这个scopeSearch() 方法替换你的用户模型上的search() 方法。您不会更改正在使用的查询。

/**
 * Scope a query to search for users name and email
 *
 * @param  \Illuminate\Database\Eloquent\Builder  $query
 * @return \Illuminate\Database\Eloquent\Builder
 */
public function scopeSearch(Builder $query, string $search) 
{
    return $query->where('name', 'like', '%'.$search.'%')
                 ->orWhere('email', 'like', '%'.$search.'%');
}

然后导入 Builder 类,方法是将以下行添加到 User 模型类的顶部,

use Illuminate\Database\Eloquent\Builder;

这里的诀窍是scope 前缀,在“搜索”中带有大写S。有关详细信息,请参阅official documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多