关系何处

时间:2019-08-19 10:03:20

标签: laravel eloquent foreign-keys

我正在尝试查询我建立的关系中的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'
    ]);

2 个答案:

答案 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'
        ]);

可能您不需要在何时返回。但是请尝试这样,并在此处提供错误来解决此问题。

祝你好运!