在laravel 10中有很多关系我想加一个“where like”子句

gpnt7bae  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(76)

我正在使用Livewire创建交互式文本表单输入。
当用户在文本框中键入一些字符时,我希望从与用户具有hasMany关系的表中返回筛选后的注册。
从本质上讲,用户拥有许多汽车。(尽管密钥是creator_id,而不是user_id)。
我正在努力做一些事情,沿着以下路线:

public function getSuggestions()
{
   $user = Auth::user();
   return $user->registrations->where('registration','like', '%' . $this->search . '%');
}

字符串
用户模型包含以下关系:

public function registrations():HasMany
{
     return $this->hasMany(Registration::class,'creator_id');
}


当我只使用下面的代码而不尝试过滤查询时...

return $user->registrations;


我得到了用户拥有的所有注册的集合,这是正确的。每次我输入一个字符时,它也会调用函数返回注册信息,所以Livewire可以正常工作
但是,我不知道如何修改查询,所以返回的注册在like子句上进行过滤。

sgtfey8w

sgtfey8w1#

假设用户模型中有以下关系:

// User.php
public function registrations(): HasMany
{
    return $this->hasMany(Registration::class, 'creator_id');
}

字符串
你可以像这样修改getSuggestions()方法:

use Illuminate\Database\Eloquent\Collection;

public function getSuggestions(): Collection
{
    $user = Auth::user();

    // Use the where method on the relationship and apply the "like" filter
    return $user->registrations()->where('registration', 'like', '%' . $this->search . '%')->get();
}


调用get()执行查询并将筛选后的注册作为集合检索。

相关问题