Laravel计费获取订阅未结束的记录

时间:2019-05-05 19:55:18

标签: laravel eloquent laravel-cashier

我正在使用Laravel Billable,并将其连接到其他模型(客户端),并且一切正常。但是,我试图获取订阅结束日期为null的模型上的所有记录。我正在执行以下操作;

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

我收到以下错误:

  

未定义的表:7错误:表“ client”的缺少FROM子句条目   第1行:从“表格”中选择*,其中“客户”。“订阅” = ... ^   (SQL:从“表”中选择*,其中“客户端”。“订阅” =(选择*   其中“ ends_at”为null))

更新

代码更新

   $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');
}

工作模型

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();

我仍然获得预订ends_at不为空的记录。有什么想法我做错了吗?

2 个答案:

答案 0 :(得分:0)

如果您使用的是Illuminate \ Database \ Eloquent命名空间中定义的基本Model类,那么我错了。

您应该直接使用模型(在您的问题/代码中似乎被称为“客户端”)并执行以下操作:

ids = ['rex', 'test']
pwds = ['rex', 'test']

def user():
    adding_username = raw_input('username: ')
    adding_password = raw_input('password: ')
    ids.append(adding_username)
    pwds.append(adding_password)
    print('\nadded: {}:{}'.format(adding_username, adding_password))
user()

答案 1 :(得分:0)

正确的查询是;

$jobs = Job::whereHas('client', function($query) {
    $query->whereHas('subscriptions', function ($query) {
        $query->where('ends_at', NULL);
    });
})->get();