我想从 Laravel 5.7 的不同表中获取单个数组中的数据

Posted

技术标签:

【中文标题】我想从 Laravel 5.7 的不同表中获取单个数组中的数据【英文标题】:I want to get data in single array from different tables in Laravel 5.7 【发布时间】:2019-05-27 10:40:31 【问题描述】:

我是 laravel 的新手,正在从事一个需要从 Laravel 5.7 中的不同表中获取数据的项目 假设我有 3 张桌子:

    我需要从中获取数据的主表 次表1 次表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 等将两个数组合并到一个数组中,但没有一种方法起作用。我不知道我该如何实现。

如果此问题中缺少任何信息,请告诉我以理解和回答问题。任何帮助将不胜感激。提前致谢。

【问题讨论】:

【参考方案1】:

您可以在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;

【讨论】:

我试过了。但它不起作用。然后我尝试使用 json 编码,然后在合并数组之前进行解码,它可以工作。您的代码在这里也有错误 $array[] = array_merge($tasks,$task_logs);应替换为 $array[] = array_merge($tasks,$task_log);所以我编辑了答案。谢谢【参考方案2】:

你能试试这个吗...希望它有效

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;

【讨论】:

每个循环现有的 task_name ,assigned_to ,描述字段添加到 $tasks 数组我认为这就是你想要的

以上是关于我想从 Laravel 5.7 的不同表中获取单个数组中的数据的主要内容,如果未能解决你的问题,请参考以下文章

laravel 5.7 whereNull

我想从 2 个不同的表中进行连接查询,我想从两个表中输出

如何在 laravel 5.7 中获取当前视图名称(页面名称)

Laravel 5.7中的电子邮件验证语言文件

Laravel 从两个表中获取数据而不使用分页连接

输入详细信息表时,我无法从主表中获取 ID(Laravel 8)