Поиск HasManyThrough - PullRequest
       9

Поиск HasManyThrough

0 голосов
/ 12 февраля 2020

Я хочу отобразить все kelompoks, которые имеют одинаковые канторы на основе ключевого слова поиска.

у меня было 3 стола

Кантор

id

nama

Гугус

id

nama

id_kantor

Келомпок

id 

nama

id_gugus

вот мой контроллер:

$kelompok=kelompok::with('bidang', 'kantor')->whereHas('kantor', function($q) use ($key) {
            $q->where('nama', 'like', '%'.$key.'%');
        })->orWhereHas('bidang', function($q) use ($key) {
            $q->where('nama', 'like', '%'.$key.'%');
        })->orWhere('nama', 'like', '%'.$key.'%')->get();

и моя модель:

Келомпок. php

public function bidang()
    {
        return $this->belongsTo('App\gugus', 'id_gugus');
    }

    public function kantor()
    {
        return $this->hasManyThrough('App\kantor', 'App\gugus', 'id_kantor', 'id_gugus', 'id', 'id');
    }

Гугус. php

publi c function kantor () {return $ this-> ownTo ('App \ kantor', 'id_kantor'); }

public function kelompok()
{
  return $this->hasMany('App\kelompok', 'id_gugus');
}

Кантор

public function gugus()
{
    return $this->hasMany('App\gugus', 'id_kantor');
}

вот вывод (ошибка), который я в настоящее время получил:

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'nama' in where clause is ambiguous (SQL: select * from `kelompoks` where exists (select * from `kantors` inner join `guguses` on `guguses`.`id` = `kantors`.`id_gugus` where `kelompoks`.`id` = `guguses`.`id_kantor` and `nama` like %gov%) or exists (select * from `guguses` where `kelompoks`.`id_gugus` = `guguses`.`id` and `nama` like %gov%) or `nama` like %gov%)

извините для моего плохого английского sh, надеюсь, вы понимаете это: D

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Я решил это, я в конечном итоге использую вложенные wherehas, не красиво, но получить работу.

$kelompok=kelompok::with('bidang')->whereHas('bidang', function($q) use ($key) {
        $q->where('nama', 'like', '%'.$key.'%');
    })->orWhereHas('bidang', function($q) use ($key){
        $q->whereHas('kantor', function($q) use ($key){
            $q->where('nama', 'like', '%'.$key.'%');
        });
    })->orWhere('nama', 'like', '%'.$key.'%')->get();
0 голосов
/ 12 февраля 2020

Попробуйте использовать tablename.columnname вместо только имени столбца, и оно должно работать нормально.

$kelompok=kelompok::with('bidang', 'kantor')->whereHas('kantor', function($q) use ($key) {
            $q->where('kantor.nama', 'like', '%'.$key.'%');
        })->orWhereHas('bidang', function($q) use ($key) {
            $q->where('bidang.nama', 'like', '%'.$key.'%');
        })->orWhere('kelompok.nama', 'like', '%'.$key.'%')->select('kantor.nama as kantor_nama')->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...