Laravel вызов функции-члена addEagerConstraints () на float - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь получить сумму столбцов в модели отношений, но получаю эту ошибку

Вызов функции-члена addEagerConstraints () в плавающем

Код

model

public function cableLentgh()
{
    return $this->links()->sum('cable_length');
}

Logi c

  1. моя модель имеет отношение к link модели, подобной этой
public function links()
{
    return $this->hasManyThrough(Link::class, Segment::class, 'hthree_id', 'segment_id');
}
в links таблице У меня есть столбец с именем cable_length, в котором хранятся числа Теперь я хочу получить СУММУ этих чисел.

Есть идеи?

Обновление

полная информация об ошибке

exception: "Error"
file: "C:\laragon\www\web\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php"
line: 578
message: "Call to a member function addEagerConstraints() on float"

Ответы [ 3 ]

0 голосов
/ 14 апреля 2020

Для меня вы должны использовать переменную, а не функцию link:

public function cableLentgh()
{
    return $this->links->sum('cable_length');
}
0 голосов
/ 14 апреля 2020

Я думаю, что это как-то связано с идентификаторами отношений ', я бы попытался указать как в документации hasManyThrough

class Country extends Model
{
    public function posts()
    {
        return $this->hasManyThrough(
            'App\Post',
            'App\User',
            'country_id', // Foreign key on users table...
            'user_id', // Foreign key on posts table...
            'id', // Local key on countries table...
            'id' // Local key on users table...
        );
    }
}
0 голосов
/ 14 апреля 2020

Если ваши отношения верны, вы должны получить collection ссылок по следующему вызову:

$this->link;

Если он возвращает коллекции, вы можете запустить sum метод сбора, как показано ниже:

public function cableLentgh()
{
    return $this->links->sum('cable_length'); //Notice () removed
}

Я знаю, что это не может быть точным ответом на вашу проблему, поскольку вы пытаетесь получить запрос sum по запросу, который является лучшим вариантом. Так как он не работает, тогда использование collection также может решить вашу проблему.

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