Объединение результатов из нескольких таблиц, которые назначаются динамически - PullRequest
0 голосов
/ 20 июня 2019

Имена таблиц должны передаваться как параметр (массив строк). Мне нужно получить из каждой таблицы значения тех же столбцов foreign_key_id и updated_at, но только самые последние десять результатов (я имею в виду те, которые были в последний раз обновлены). Мне нужно объединить результат из каждой таблицы. Кроме того, у меня уже есть список foreign_key_id s, для которого я ищу таблицы. Как я пытался это сделать:

$foreign_key_ids = ['1', '2', '3', '4'];
$tables = ['table_A', 'table_B', 'table_C'];

foreach ($foreign_key_ids as $foreign_key_id)
{
    $index = 0;

    foreach($tables as $table)
    {
        $query = DB
             ::table($table)
             ->select('foreign_key_id', 'updated_at')
             ->where('foreign_key_id', $foreign_key_id)
             ->orderBy('updated_at', 'desc')
             ->limit(10);

        if ($index == 0)
        {
            $single_table = $query;
        }
        else
        {
            $single_table->union($query);
        }

        $index++;
    }

        $full_result[] = $single_table;
    }

    $final_result = [];

    foreach($full_result as $single_result)
    {
        $final_result->union($single_result);
    }

    $final_result = $final_result->get();
}

Но я получаю исключение Call to a member function union() on array и не знаю почему, причина $single_result в последнем foreach не является массивом, это экземпляр builder.

1 Ответ

1 голос
/ 20 июня 2019

... и не уверен почему, причина $single_result в последнем foreach не array, это экземпляр Builder.

Учитывая, что в вопросе не указано, в какой строке выдается ошибка, я предполагаю, что в этих двух строках:

// ...

$final_result = []; // <----------- (1)

foreach($full_result as $single_result)
{
    $final_result->union($single_result);  // <----------- (2)
}

// ...

Как видите, $final_result инициализируется как array (1), а затем вы вызываете метод ->union() для этого array (2). Вот почему выдается ошибка (или, по крайней мере, будет выдана другая ошибка).

Попробуйте вместо этого:

// ...

$final_result = collect(); // <-----------

foreach($full_result as $single_result)
{
    $final_result = $final_result->union($single_result);  // <-----------
}

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