亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

動態查詢雄辯

動態查詢雄辯

PHP
慕容3067478 2022-01-08 17:23:59
我有這 2 個鏈接模型:jobs和job_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()是否可以使用 Eloquent 進行這樣的動態查詢?
查看完整描述

2 回答

?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

對的,這是可能的。您正在尋找的是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:


$jobs = Job::query()

    ->when($request->translation, function ($query, $translation) {

        $query->whereHas('translations', function ($query) use ($translation) {

            $query->where('external_translation', 'ilike', "%{$translation}%");

        });

    })

    ->paginate(10);


查看完整回答
反對 回復 2022-01-08
?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

您應該在下一個鏈式查詢中檢測到急切加載的問題,如下所示:

$query = Job::with('translations')->query();


查看完整回答
反對 回復 2022-01-08
  • 2 回答
  • 0 關注
  • 141 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號