繁体   English   中英

Laravel 8 查询 - class 的 Object Illuminate\Database\Eloquent\Builder 无法转换为字符串

[英]Laravel 8 Query - Object of class Illuminate\Database\Eloquent\Builder could not be converted to string

我正在显示汽车列表,所有这些汽车都归不同的用户所有。 我的汽车 model 与我的用户 model 有一个user_id外键的关系。 我试图通过用户first_name通过 model 查询汽车,但我得到Object of class Illuminate\Database\Eloquent\Builder could not be converted to string错误如果我只查询usercar model,搜索工作正常,但一旦我尝试将用户 model 列添加到查询中,就会出错。

Usercar.php

<?php

namespace App\Models;

use App\Traits\BelongsToTenant;
use Illuminate\Database\Eloquent\Model;

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.'%');
  });
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM