我正在显示一个汽车列表,所有这些汽车都由不同的用户拥有。我的汽车模型与具有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.'%');
});
...