Я хочу получить данные в одном массиве из разных таблиц в Laravel 5.7 - PullRequest
0 голосов
/ 30 декабря 2018

Я новичок в laravel и работаю над проектом, в котором мне нужно получить данные из разных таблиц в Laravel 5.7. Предположим, у меня есть 3 таблицы:

  1. Основная таблица, из которой мне нужно получитьданные
  2. Вторичная таблица 1
  3. Вторичная таблица 2

Столбцы главной таблицы

id (auto increment primary key)
task_name (I have stored secondary table name here)
tid (task id)  
assigned_to
description

Вот мой код

public function viewTasks(){
    $task_logs = TaskLog::orderBy('id','desc')->get();
    foreach($task_logs as $task_log)
    {
        $table_name = $task_log['task_name'];
        if(Schema::hasTable($table_name))
        {
            $tasks[] = DB::table($table_name)->where('id', $task_log->tid)->first();
        }
    }

    return $tasks;

А вот вывод:

[
  {
    "id": 220,
    "uId": 324,
    "document_name": "Photo Id",
    "document_image": "image1.jpg",
    "created_at": "2018-12-30 09:56:24",
    "updated_at": "2018-12-30 09:56:24",
    "status": 1,
  },
  {
    "id": 114,
    "uId": 382,
    "makeModel": "Motorola 501",
    "PhoneTitle": "New launched",
    "price": "500",
    "dealerName": "",
    "created_at": "2018-12-30 09:56:24",
    "updated_at": "2018-12-30 09:56:24",
    "status": 1,
  }
]

Вывод того, что мне нужно:

[
  {
    "id": 220,
    "uId": 324,
    "document_name": "Photo Id",
    "document_image": "image1.jpg",
    "created_at": "2018-12-30 09:56:24",
    "updated_at": "2018-12-30 09:56:24",
    "status": 1,
    "task_name": "documents",
    "assigned to": 3,
    "Description": "Description here",
  },
  {
    "id": 114,
    "uId": 382,
    "makeModel": "Motorola 501",
    "PhoneTitle": "New launched",
    "price": "500",
    "dealerName": "",
    "created_at": "2018-12-30 09:56:24",
    "updated_at": "2018-12-30 09:56:24",
    "status": 1,
    "task_name": "wishlists",
    "assigned to": 2,
    "Description": "Description here"
  }
]

Я пробовал разные способы, используя функции array_push и array_merge и т. Д., Чтобы объединить два массива в одинмассив но никто не работал.Я не знаю, как мне это реализовать.

Пожалуйста, дайте мне знать, если в этом вопросе отсутствует какая-либо информация, чтобы понять и ответить на вопрос.Любая помощь будет принята с благодарностью.Заранее спасибо.

Ответы [ 2 ]

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

Можете ли вы попробовать это ... надеюсь, это сработает

public function viewTasks(){
        $i = 0;
        $task_logs = TaskLog::orderBy('id','desc')->get();
        foreach($task_logs as $task_log)
        {   
            $table_name = $task_log['task_name'];
            if(Schema::hasTable($table_name)){                
                $tasks[$i] = DB::table($table_name)->where('id', $task_log->tid)->first();
                $tasks[$i]['task_name'] = $task_log['task_name'];
                $tasks[$i]['assigned_to'] = $task_log['assigned_to'];
                $tasks[$i]['description'] = $task_log['description'];
                $i++;
            }
        }

        return $tasks;
0 голосов
/ 31 декабря 2018

вы можете объединять различные объекты в PHP, в этом случае вам нужно использовать переменные в одном массиве в foreach, и вы получите требуемый формат данных.

public function viewTasks(){
$array = [];
    $task_logs = TaskLog::orderBy('id','desc')->get();
    foreach($task_logs as $task_log)
    {
        $table_name = $task_log['task_name'];
        if(Schema::hasTable($table_name))
        {
            $tasks[] = DB::table($table_name)->where('id', $task_log->tid)->get();
        $array[] = array_merge($tasks,$task_log);
        }
    }    
    return $array;
...