Я создаю личиночное приложение, которое извлекает данные из действующей базы данных, используемой на другом веб-сайте. Я не могу изменить базу данных в любом случае. Чего я хочу добиться, так это получить общую сумму в таблице платежей для клиента. У меня следующая структура базы данных.
Клиенты
id
Клиенты
id
ClientCustomer
client_id
customer_id
Подписки
id
client_id
customer_id
Subscription_Billings
id
subscription_id
payment_id
created
Платежи
id
customer_id
amount
created
Это модели
Клиент. php
public function customers()
{
return $this->belongsToMany('App\Customer');
}
public function subscriptions()
{
return $this->hasMany('App\Subscription');
}
public function subscriptionBillings()
{
return $this->hasManyThrough(
'App\SubscriptionBilling',
'App\Subscription'
);
}
Клиент. php
public function clients()
{
return $this->belongsToMany('App\Client');
}
public function payments()
{
return $this->hasMany('App\Payment');
}
Подписка. php
public function client()
{
return $this->belongsTo('App\Client');
}
public function SubscriptionBillings()
{
return $this->hasMany('App\SubscriptionBilling');
}
Подписка Биллинг. php
public function subscription()
{
return $this->belongsTo('App\Subscription');
}
public function payment()
{
return $this->hasOne('App\Payment');
}
Оплата. php
public function subscriptionBilling()
{
return $this->belongsTo('App\SubscriptionBilling');
}
public function customer()
{
return $this->belongsTo('App\Customer');
}
Затем в моем контроллере я попробовал следующее.
Контроллер. php
$client = Client::find(1);
$amount = $client->subscriptionBillings()
->whereRaw("DATE_FORMAT(subscription_billings.createddate, '%Y-%m-%d') >= '{$startDate}'")
->whereRaw("DATE_FORMAT(subscription_billings.createddate, '%Y-%m-%d') <= '{$endDate}'")
->whereHas('payment', function (Builder $query) {
$query->sum('amount');
});
Когда я пытаюсь сделать это, я получаю следующую ошибку
Столбец не найден: 1054 Неизвестный столбец 'subscription_billings.payment_id' в 'выражении where' (SQL: выберите сумму (amount
) в качестве совокупности из payments
, где subscription_billings
. payment_id
= payment
. id
В отладчике larval я получаю сообщение «Оператор SELECT не имеет предложения WHERE и может проверять намного больше строк, чем предполагалось»
Опять же, что я пытаясь получить сумма суммы в платежах для данного клиента. Я не знаю, нужно ли мне или как создать отношения между клиентом и платежами.