Laravel 8查询-Illuminate\Database\Eloquent\Builder类的对象无法转换为



我正在显示一个汽车列表,所有这些汽车都由不同的用户拥有。我的汽车模型与具有user_id外键的用户模型有关系。我正试图通过用户first_name的模型查询汽车,但我得到了一个Object of class IlluminateDatabaseEloquentBuilder could not be converted to string错误。如果我只是查询usercar模型,搜索效果很好,但一旦我尝试将用户模型列添加到查询中,搜索就会失败。

Usercar.php

<?php
namespace AppModels;
use AppTraitsBelongsToTenant;
use IlluminateDatabaseEloquentModel;
class Usercar extends Model
{
use BelongsToTenant;
protected $guarded = [];
public function user()
{
return $this->belongsTo(User::class);
}
public function car()
{
return $this->belongsTo(Car::class, 'car_id');
}
public static function search($query)
{
return empty($query) ? static::query()
: static::where('car_id', 'like', '%'.$query.'%')
->orWhere('car_class', 'like', '%'.$query.'%')

// Problem starts here
->orWhereHas('user', function($query){
$query->where('first_name', 'like', '%'.$query.'%');
});
}
}

ShowUserCars.php

...
public function render()
{
$query = Usercar::search($this->search)
->with('user')
->orderBy($this->sortField, $this->sortAsc ? 'asc' : 'desc');
return view('livewire.show-user-cars', [
'usercars' => $query->paginate($this->perPage),
'currentUser' => auth()->user()
]);
}
}

感谢@lagbox的指导。我用下面的代码找到了一个解决方案。

...
->orWhereHas('user', function($q) use($query){
$q->where('first_name', 'like', '%'.$query.'%');
});
...

最新更新