我正在创建一个应用,并且涉及迷你搜索。
搜索会选择所有用户,其首选项与当前登录的用户有效属性相匹配。
属性行是此PropertyAdverts
首选项行
所以我以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'));
}
答案 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不熟悉。
请查看此代码并尝试,如果您有任何疑问,请发表评论。