Колонка не найдена: 1054; Столбец совпадает с другим столбцом, поэтому должен работать - PullRequest
0 голосов
/ 02 мая 2018

Я создаю приложение и участвую в мини-поиске.

При поиске выбираются все пользователи, для которых их предпочтения совпадают с добавленными активными в настоящее время активными свойствами пользователя.

Строка свойства - это PropertyAdverts

enter image description here

Строка настроек

enter image description here

Итак, я вошел как ID пользователя: 1

Так как в одном из моих отелей есть город Дублин, а в одном из предпочтений - город Дублин, запрос должен работать, но я получаю эту ошибку

SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец «Дублин» в «где предложение» (SQL: выберите * из tenant_preferances, где Dublin = Дублин)

Пока это мой код

public function searchresults(){

    //Gets all users that are tenants
    $tenants = User::where('userType', 'tenant')->first();
    //Gets all preferances
    $Prefereances = TenantPreferance::all()->first();
    //Gets the prefereances that match a tenant id
    $pref = $Prefereances::where('user_id', $tenants->id)->first();

    //Gets the current signed in users property
    $property = PropertyAdvert::where('user_id', Auth::user()->id)->first();

    $result = $pref::where(
     $pref->county , $property->county
    );

   $users = $result->get();

   return view('pages/account/search/results', compact('users'));

  }

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Вот в чем проблема, вы передаете переменную первому аргументу предложения where(), первым аргументом должно быть имя столбца в БД

 $result = $pref::where(
   'county' , $property->county
);
0 голосов
/ 02 мая 2018

Я думаю, что ваша структура запросов неверна.

1)

В первом запросе у вас есть комментарий типа //Gets all users that are tenants, но вы используете метод first().

Если вы хотите, чтобы все пользователи с арендатором типа, вы можете использовать get() метод

//Gets all users that are tenants
$tenants = User::where('userType', 'tenant')->get();

А если вы хотите только одного пользователя с типом арендатора, вы можете использовать first() метод.

//Gets all users that are tenants
$tenants = User::where('userType', 'tenant')->first();

2)

Во втором запросе $Prefereances = TenantPreferance::all()->first(); вы используете all() и first() оба метода.

Если вы хотите, чтобы все настройки all() метод достаточно, чтобы получить все настройки.

//Gets all preferances
$Prefereances = TenantPreferance::all();

3)

Теперь вы хотите, чтобы настройки соответствовали идентификатору арендатора

Здесь, если вы использовали first() метод в 1-м запросе, вы можете сделать запрос следующим образом:

//Gets the preferences that match a tenant id
$prefs = Prefereances::where('user_id', $tenants->id)->first();

И если вы использовали метод get() в 1-м запросе, то вы можете выполнить запрос, используя метод whereIn(), но перед этим вы должны брать только идентификаторы от арендаторов, для которых вы можете использовать pluck() метод

$tenantIds = User::where('userType', 'tenant')->pluck('id');

И тогда вы можете использовать whereIn() метод.

//Gets the preferences that match a tenant id
$prefs = Prefereances::whereIn('user_id', $tenantIds)->where()->get();

Теперь вы хотите отфильтровать страну, в которую вошел пользователь, поэтому вам нужно сначала написать эту строку в своей функции

//Gets the current signed in users property
$property = PropertyAdvert::where('user_id', Auth::user()->id)->first();

Ваш финализированный код функции должен быть таким,

public function searchresults(){

    //Gets the current signed in users property
    $property = PropertyAdvert::where('user_id', Auth::user()->id)->first();

    //Gets all users that are tenants
    $tenants = User::where('userType', 'tenant')->get();

    //Gets the prefereances that match a tenant id
    $prefs = TenantPreferance::whereIn('user_id', $tenantIds)->where('country',$property->country)->get();

   $users = $prefs;

   return view('pages/account/search/results', compact('users'));

  }

Надеюсь, вы поймете это со спокойным умом, потому что кажется, что вы новичок в Laravel.

Пожалуйста, просмотрите этот код и попробуйте, а затем, если у вас есть какие-либо сомнения, прокомментируйте.

0 голосов
/ 02 мая 2018

Здесь есть проблема:

$result = $pref::where(
 $pref->county , $property->county
);

Вы пытаетесь сопоставить значение (Dublin) с самим собой, следовательно, ошибка.

Скорее всего, вы хотите сопоставить поле со значением, поэтому синтаксис должен быть:

$result = $pref::where(
 'county' , $property->county
);
...