Laravel Красноречивый запрос - PullRequest
0 голосов
/ 09 марта 2020

У меня есть две модели: Персоны и Номера телефонов

Персоны. php

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

    public function phoneNumbers() {
        return $this->hasMany('App\PhoneNumbers', 'persons_id', 'id');
    }
}

Номера телефонов. php

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: выберите * из phone_numbers, где persons. id = phone_numbers. persons_id и person_phone как %% limit 1)

Кажется, что Laravel дает неправильное имя для моих столбцов и делает неправильным SQL. Я знаю о соглашениях об именах. Но я не могу найти ошибку. Можете ли вы помочь мне сделать правильный SQL с Eloquent?

1 Ответ

0 голосов
/ 09 марта 2020

try

$this->belongsTo('App\Persons');
$query->where('phone_numbers.person_phone', 'like', '%' . $person_phone . '%')->first();

Также это может быть

->whereHas('phoneNumbers', function ($query) use ($request) {
                $query->where('person_phone', 'like', '%' . $request->person_phone . '%')->first();
            })->latest()->paginate(5);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...