Laravel красноречивый поиск - PullRequest
1 голос
/ 04 апреля 2020

В настоящее время я создаю функцию поиска по моему файлу индекса.

У меня разные пользователи, которые имеют разные магазины в каждой области.

моя модель пользователя:

    function area() {
    return $this->hasOne('App\Area');        
}

function role() {
    return $this->belongsTo('App\Role');
}

function reports() {
    return $this->hasMany('App\Report');
}

function stores() {
    return $this->hasManyThrough('App\Store', 'App\Area');
}

}

Модель района:

   function reports() {
    return $this->hasMany('App\Report');
}

function stores() {
    return $this->hasMany('App\Store');
}

 function user() {
    return $this->belongsTo('App\User');
}

Модель магазина:

    function district() {
    return $this->belongsTo('App\District');
}


function cluster() {
    return $this->belongsTo('App\Cluster');
}
function city() {
    return $this->belongsTo('App\City');
}

 function area() {
    return $this->belongsTo('App\Area');
}

Мне удалось настроить функционал на учетной записи администратора (где вы можете видеть все магазины) с помощью:

function index(Request $request) {
    if($request->has('search')) {
        $stores = Store::whereHas('city', function($query) use($request) {
        $query->where('name', 'like', '%' . $request->search . '%');
    })->orWhereHas('cluster', function($query) use($request) {
        $query->where('name', 'like', '%' .$request->search. '%');
    })->orWhere('name', 'like', '%' .$request->search. '%')
      ->orWhere('store_no', 'like', '%' .$request->search. '%')->paginate(10);  

    } else {
        $stores = Store::orderBy('created_at', 'desc')->paginate(10);
    }

    return view('/stores.store_list', compact('stores'));

что я для учетных записей пользователей:

function index(Request $request) {
    if($request->has('search')) {
        $id = Auth::user()->id;
        $query = $request->search;
        $user = User::find($id)->stores()->where('name', 'like', '%' . $query . '%')->paginate(10);


    } else {

        $id = Auth::user()->id;
       $user = User::find($id)->stores()->orderBy('created_at', 'desc')->paginate(10);
    }

    return view('/stores.store_list', compact('user'));

}

При поиске возникает ошибка:

SQLSTATE [23000]: нарушение ограничения целостности: 1052 Имя столбца в где условие является неоднозначным (SQL: выберите количество (*) в качестве совокупности из stores внутреннего объединения areas на areas. id = stores. area_id где areas. user_id = 6 и name как% houston% и stores. deleted_at равно нулю)

Может ли кто-нибудь указать мне правильное направление и дать мне знать, чего мне здесь не хватает? Спасибо!

1 Ответ

1 голос
/ 06 апреля 2020

Если у вас есть ошибка, например

Column 'some_column_name_here' in where clause is ambiguous...

, это означает, что существует сложный запрос, связанный с большим количеством таблиц, из которых как минимум две имеют одинаковое имя таблицы в своей структуре, и что имя таблицы используется в сложном запрос (в некоторых ON, WHERE ...) в этом случае WHERE как состояния ошибки. Вы всегда можете использовать синтаксис table_name.column_name {имя таблицы с точечным именем столбца}, чтобы указать синтаксис на точное значение таблицы ( неоднозначный ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...