未找到专栏:1054;列与另一列匹配,因此应该工作

时间:2018-05-02 11:44:03

标签: laravel eloquent query-builder

我正在创建一个应用,并且涉及迷你搜索。

搜索会选择所有用户,其首选项与当前登录的用户有效属性相匹配。

属性行是此PropertyAdverts

enter image description here

首选项行

enter image description here

所以我以userid:1

登录

因为我的一个酒店有一个都柏林小镇,其中一个偏好有一个都柏林小镇,查询应该有效,但我收到了这个错误

  

SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'Dublin'(SQL:select * from tenant_preferances其中Dublin = 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 :(得分:0)

这里有一个问题:

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

您正在尝试将值(Dublin)与自身匹配,因此错误。

您可能希望将字段与值匹配,因此语法应为:

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

答案 1 :(得分:0)

问题在于,您正在将变量传递给where()子句的第一个参数,第一个参数应该是DB中列的名称

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

答案 2 :(得分:0)

我认为你的查询结构不合适。

  

<强> 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)

现在您需要与租户ID匹配的首选项

如果您在第一个查询中使用了 first() 方法,那么您可以执行此类查询,

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

如果您在第一个查询中使用了 get() 方法,那么您可以使用whereIn()方法进行查询,但在此之前,您必须仅从租户那里获取ID可以使用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不熟悉。

请查看此代码并尝试,如果您有任何疑问,请发表评论。