Нахождение наивысшего значения в красноречивых отношениях - PullRequest
0 голосов
/ 02 ноября 2019

Таким образом, я в основном пытаюсь найти значения выбранных результатов (могут отличаться), а затем сравнить их, чтобы найти максимальное конкретное значение столбца в зависимости от того, сколько результатов выбрано.

Вот как я собираю свои результаты:

public function index($id = null, $name = null, $id2 = null, $name2 = null, $id3 = null, $name3 = null)
{
    $users = [];
    $jsonStats = [];
    if (isset($id)) {
        $users[] = Users::query()->findOrFail($id);
        if (isset($id2)) {
            $users[] = Users::query()->findOrFail($id2);
            if (isset($id3)) {
                $users[] = Users::query()->findOrFail($id3);
            }
        }
    }
    foreach ($users as $user) {
        $jsonStats[] = $user->stats->asArray();
    }
    return view('frontend.index', [
        'users' => $users,
        'stats_json' => $jsonStats
    ]);
}

Итак, как вы можете видеть, я наконец-то получил результат Eloquent в массиве users[], хотя затем мне нужно найти самое высокое значение из отношения, названного stats

Я попытался сделать следующее, но безрезультатно:

{{ max(array_column($users->stats, 'stat1')) }}

Что выдает следующее:

Попытка получить свойство 'stats' необъекта

РЕДАКТИРОВАТЬ Моя $user->stats->asArray(); функция возвращает следующее:

public function asArray()
{
    return [
        'stat1' => [
            [
                'id' => 'attribute1',
                'name' => 'Attribute1',
                'type' => 'main',
                'value' => $this->attr1Value
            ],
            [
                'id' => 'attribute2',
                'name' => 'Attribute2',
                'type' => 'main',
                'value' => $this->attr2Value
            ],
            [
                'id' => 'attribute3',
                'name' => 'Attribute3',
                'type' => 'main',
                'value' => $this->attr3Value
            ]
        ]
    ];
}

При попытке найти максимальное значение из этого массива я пробовал следующее:

{{ max(array_column($stats_json['stat1'][0], 'value')) }}

Ответы [ 2 ]

1 голос
/ 02 ноября 2019

Сначала мы получаем запрос красноречивого отношения. Пример:

'$data' => [
        [
            'id' => '1',
            'name' => 'subject1',
            'type' => 'T',
            'value' => $this->Value
        ],
        [
            'id' => '2',
            'name' => 'subject2',
            'type' => 'M',
            'value' => $this->Value
        ],
        [
            'id' => '3',
            'name' => 'subject2',
            'type' => 'T',
            'value' => $this->Value
        ]
    ]

Мы можем получить максимальное значение, например:

$max1 = max(array_column($data, 'value')) // only get value max


foreach ($data as $array) {
     if (in_array($array['value'],$max1)) {
         return $array;
     }
} 

Это возвращаемое значение является наибольшим значением в красноречивых отношениях laravel

0 голосов
/ 02 ноября 2019

Поскольку вы проверяете, установлен ли $id, это необязательно, и блок foreach будет пытаться получить доступ к свойству stats того, что может быть null, сделайте итерацию условной

public function index($id = null, $name = null, $id2 = null, $name2 = null, $id3 = null, $name3 = null)
{
    $users = [];
    $jsonStats = [];
    if (isset($id)) {
        $users[] = Users::query()->findOrFail($id);
        if (isset($id2)) {
            $users[] = Users::query()->findOrFail($id2);
            if (isset($id3)) {
                $users[] = Users::query()->findOrFail($id3);
            }
        }
        foreach ($users as $user) {
            $jsonStats[] = $user->stats->asArray();
        }
    }
    return view('frontend.index', [
        'users' => $users,
        'stats_json' => $jsonStats
    ]);
}

Вы также можете использовать вспомогательную функцию optional, чтобы избежать ошибок при попытке доступа к свойствам не объектов

$jsonStats[] = optional($user)->stats->asArray();

Надеюсь, это поможет

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