Laravel Billable получить записи, где подписка не закончилась - PullRequest
0 голосов
/ 05 мая 2019

Я использую Laravel Billable, и я подключил его к другой модели (клиент), и все работает отлично. Однако я пытаюсь получить все записи в модели, в которой дата окончания подписки равна нулю. Я делаю следующее:

$collection = Model::where('client.subscriptions', function ($q) {
    $q->where('ends_at', NULL);
})->get();

Я получаю следующую ошибку:

Неопределенная таблица: 7 ОШИБКА: отсутствует запись предложения FROM для таблицы «клиент» ЛИНИЯ 1: выберите * из "таблицы", где "клиент". "Подписки" = ... ^ (SQL: выберите * из "таблицы", где "клиент". "Подписки" = (выберите * где "заканчивается_соль" равно нулю))

Обновление

Обновление кода

   $jobs = \App\Models\Job::with(['client' => function($query) {
    $query->whereHas('subscriptions', function ($query){
        $query->where('ends_at', NULL);
    });
}])->get();

Пример базы данных

(model) Job (db:name = 'jobs')

id | client_id | name

(model) Client (db:name = 'clients')

id | name 

(model) Subscription (db:name = 'subscriptions')

id | client_id | stripe_plan | trial_ends_at | ends_at 

Модель клиента

/**
 * Get all of the subscriptions for the Stripe model.
 *
 * @return \Illuminate\Database\Eloquent\Relations\HasMany
 */
public function subscriptions()
{
   // foreign key is client_id
    return $this->hasMany(Subscription::class, $this->getForeignKey())->orderBy('created_at', 'desc');
}

Job Model

public function client()
{
    return $this->belongsTo(Client::class);
}

Теперь с помощью этого запроса;

 $jobs = \App\Models\Job::with(['client' => function($query) {
        $query->whereHas('subscriptions', function ($query){
            $query->where('ends_at', NULL);
        });
    }])->get();

Я все еще получаю записи, в которых подписка заканчивается_пустую. Есть идеи, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Правильный запрос:

$jobs = Job::whereHas('client', function($query) {
    $query->whereHas('subscriptions', function ($query) {
        $query->where('ends_at', NULL);
    });
})->get();
0 голосов
/ 06 мая 2019

Если вы используете базовый класс Model, определенный в пространстве имен Illuminate \ Database \ Eloquent, то вы ошибаетесь.

Вы должны напрямую использовать свою модель (из вашего вопроса / кода она называется Client) и сделать что-то вроде этого:

$collection = Client::where('subscriptions', function ($q) {
    return $q->whereNull('ends_at');
})->get();
...