Как я могу получить сумму столбца в красноречивом отношении, где две таблицы не имеют прямого соединения - PullRequest
0 голосов
/ 18 февраля 2020

Я создаю личиночное приложение, которое извлекает данные из действующей базы данных, используемой на другом веб-сайте. Я не могу изменить базу данных в любом случае. Чего я хочу добиться, так это получить общую сумму в таблице платежей для клиента. У меня следующая структура базы данных.

Клиенты

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 и может проверять намного больше строк, чем предполагалось»

Опять же, что я пытаясь получить сумма суммы в платежах для данного клиента. Я не знаю, нужно ли мне или как создать отношения между клиентом и платежами.

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