动态查询雄辩

时间:2019-09-12 14:09:52

标签: php laravel eloquent

我有两个链接的模型:jobsjob_translations。一份工作有很多翻译。在我的工作模型中,有:

/**
 * Get the translations for the job.
 */
public function translations()
{
    return $this->hasMany('App\Models\JobTranslation');
}

在我的控制器中,我想像这样动态地构建查询:

$query = Job::query();
if ($request->has('translation')) {
            $query->translations()->where('external_translation', 'ilike', '%'.$request->translation.'%');
        }

$jobs = $query->paginate(10);

我遇到此错误:

  

调用未定义的方法Illuminate \ Database \ Eloquent \ Builder :: translations()

是否可以用口才做这样的动态查询?

2 个答案:

答案 0 :(得分:1)

是的,有可能。您正在寻找的是itemIndexPath而不是whereHas('translations', $callback)

translations()

使用$query = Job::query(); if ($request->has('translation')) { $query->whereHas('translations', function ($query) use ($request) { $query->where('external_translation', 'ilike', '%'.$request->translation.'%'); }); } $jobs = $query->paginate(10); 代替when($condition, $callback)可以进一步改善您的查询:

if

答案 1 :(得分:0)

您应该急于在下一个链接查询中检测到的问题是这样的:

.style