Laravel 拉雷维尔雄辩的请求

Laravel 拉雷维尔雄辩的请求,laravel,eloquent,Laravel,Eloquent,我有两种型号:个人和电话号码 Persons.php class Persons extends Model { protected $table = 'persons'; protected $guarded = []; public function phoneNumbers() { return $this->hasMany('App\PhoneNumbers', 'persons_id', 'id'); } } class P

我有两种型号:个人和电话号码

Persons.php

class Persons extends Model
{
    protected $table = 'persons';  
    protected $guarded = [];

    public function phoneNumbers() {
        return $this->hasMany('App\PhoneNumbers', 'persons_id', 'id');
    }
}
class PhoneNumbers extends Model
{
    protected $table = 'phone_numbers';
    protected $guarded = [];

    public function persons() {
        return $this->belongsTo('App\Persons', 'persons_id', 'id');
    }
}
PhoneNumbers.php

class Persons extends Model
{
    protected $table = 'persons';  
    protected $guarded = [];

    public function phoneNumbers() {
        return $this->hasMany('App\PhoneNumbers', 'persons_id', 'id');
    }
}
class PhoneNumbers extends Model
{
    protected $table = 'phone_numbers';
    protected $guarded = [];

    public function persons() {
        return $this->belongsTo('App\Persons', 'persons_id', 'id');
    }
}
我的桌子:

1) persons (id, first_name, last_name, middle_name)
2) phone_numbers (id, person_phone, persons_id)
我有一个搜索表,上面有名字、中间名、姓氏、人名和电话。 我请求:

 $first_name = $request->first_name;
 $middle_name = $request->middle_name;
 $last_name = $request->last_name;

 $persons = Persons::where('first_name', 'LIKE', '%' . $first_name . '%')
            ->where('middle_name', 'LIKE', '%' . $middle_name . '%')
            ->where('last_name', 'LIKE', '%' . $last_name . '%')
            ->whereHas('phoneNumbers', function (Builder $query) {
                $person_phone = ((new \Illuminate\Http\Request)->get('person_phone'));
                $query->where('person_phone', 'like', '%' . $person_phone . '%')->first();
            })->latest()->paginate(5);
并获取一个错误:

SQLSTATE[42S22]:未找到列:中的1054未知列“persons.id” “where子句”(SQL:select*from
phone\u number
where
个人
身份证=
电话号码
个人身份证
个人电话
类似 %%限制(1)

似乎Laravel给我的列起了“错误”的名字,并使我更正了SQL。我知道命名约定。但是我找不到错误。 你能帮我用雄辩的语言编写正确的SQL吗?

试试看

$this->belongsTo('App\Persons');
这也可以是

->whereHas('phoneNumbers', function ($query) use ($request) {
                $query->where('person_phone', 'like', '%' . $request->person_phone . '%')->first();
            })->latest()->paginate(5);