Laravel Eager Загрузка с некоторыми условиями в обоих концах - PullRequest
0 голосов
/ 10 октября 2018

Я получаю запрос sql следующим образом:

выберите * из geofilter_activations, где не существует (выберите * из snap_submissions, где geofilter_activations. purchase_id = snap_submissions.purchase_id) и status = 0 и created_at <2018-10-10 07:15:42 порядок по <code>id desc limit 1

Но что случилось с запросом, который я добавилОткуда подписка?Это не приходит в выводе запроса.Дайте мне способ оптимизировать запрос и заставить его работать.

    $time_before = '10';
    $dt = Carbon::now();

    $activation = GeofilterActivation::doesntHave('submission_data')
        ->where('status', '0')
        ->where('created_at', '<', $dt->subMinutes($time_before)->toDateTimeString())
        ->OrderBy('id','desc')
        ->first();

    $activation->load(['purchase' => function ($query) {
        $query->whereNotNull('subscription_id');
    }]);

А модель GeoFilterActivation:

<?php

namespace App\Models\Geofilter;

use Illuminate\Database\Eloquent\Model;

class GeofilterActivation extends Model
{
    public function purchase(){
        return $this->belongsTo('App\Models\Geofilter\GeofilterPurchase', 'purchase_id');
    }
    public function submission_data(){
        return $this->belongsTo('App\Models\Geofilter\SnapSubmission', 'purchase_id', 'purchase_id');
    }

    public function ad_stat(){
        return $this->belongsTo('App\Models\Geofilter\SnapAdStat', 'purchase_id', 'purchase_id');
    }

    public function currency(){
        return $this->belongsTo('App\Models\Currency', 'currency_code', 'code');
    }
}

1 Ответ

0 голосов
/ 10 октября 2018

Может быть, что-то в этом духе поможет вам:

$result = GeofilterActivation::with(['purchase' => function($query) {
        $query->whereNotNull('subscription_id');
    }])
    ->doesntHave('submission_data')
    ->where('status','0')
    ->where('created_at', '<', $dt->subMinutes($time_before)->toDateTimeString())
    ->OrderBy('id','desc')
    ->first();

Причина, по которой ваш запрос не включил это load, заключается в том, что load вызывается после выполнения вашего запроса, поэтому вам необходимовключить отношение в запрос с помощью with.Пример, который вы упомянули выше с загрузкой, на самом деле lazy load, потому что вы запрашиваете объект, когда он необходим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...