我正在尝试查询我建立的关系中的class Nufus_ilce(models.Model):
city = models.CharField(max_length=15)
year = models.IntegerField(default=0)
population = models.IntegerField(default=0)
def __str__(self):
return '%s %s' % (self.city, self.year)
。
这是一种1-1关系,因为client
有一个客户。
客户评估表包含一个client_valuation
列,而客户表包含一个client_id
。关系很好。
我在页面顶部设置了搜索表单,该表单传递了包含“ q”参数的get请求。设置了q后,我想运行一个查询,该查询也调用clients表来查询client_name。
目前还无法执行此操作。
我的控制器如下:
id
控制器每次都返回0个结果。
客户评估模型
$valuations = ClientValuation::orderBy('created_at', 'desc')
->whereHas('client', function ($query) use ($request)
{
$query->where('client_name', 'like', '%'.$request->input('q').'%');
})
->when($request->input('q'), function($query) use ($request)
{
return $query->where(function ($query) use ($request)
{
$query->where('client_valuation_street', 'like', '%'.$request->input('q').'%');
});
})
->paginate(20);
return view('backend.client_valuations.index',
[
'valuations' => $valuations,
'pageTitle' => 'Market Valuations'
]);
答案 0 :(得分:2)
因此,您希望在两个条件之间使用OR
。
$valuations = ClientValuation::orderBy('created_at', 'desc')
->whereHas('client', function ($query) use ($request) {
$query->where('client_name', 'like', '%'.$request->input('q').'%');
})
->orWhere('client_valuation_street', 'like', '%'.$request->input('q').'%')
->paginate(20);
return view('backend.client_valuations.index',
[
'valuations' => $valuations,
'pageTitle' => 'Market Valuations'
]);
顺便说一句,when()
并没有做什么用,因为您也在客户端名称条件中使用了$request->input('q')
。除非您想将两者都放在when()
方法内。
$valuations = ClientValuation::orderBy('created_at', 'desc')
->when($request->input('q'), function($query) use ($request) {
$query->whereHas('client', function ($query) use ($request) {
$query->where('client_name', 'like', '%'.$request->input('q').'%');
})
->orWhere('client_valuation_street', 'like', '%'.$request->input('q').'%');
})
->paginate(20);
return view('backend.client_valuations.index',
[
'valuations' => $valuations,
'pageTitle' => 'Market Valuations'
]);
答案 1 :(得分:1)
您的模型中不需要foreign_key
,因此请像这样编辑它:
public function client()
{
return $this->hasOne('App\Models\Client::class');
}
然后在您的控制器中使用以下关系:
$valuations = ClientValuation::with('client')
->orderBy('created_at', 'desc')
->whereHas('client', function ($query) use ($request) {
$query->where('client_name', 'like', '%'.$request->input('q').'%');
})
->when($request->input('q'), function($query) use ($request) {
$query->where(function ($query) use ($request) {
$query->where('client_valuation_street', 'like', '%'.$request->input('q').'%');
});
})
->paginate(20);
return view('backend.client_valuations.index',
[
'valuations' => $valuations,
'pageTitle' => 'Market Valuations'
]);
可能您不需要在何时返回。但是请尝试这样,并在此处提供错误来解决此问题。
祝你好运!