php - 在 Laravel get() 查询生成器中附加两个数组

标签 php mysql arrays laravel

我必须在 Laravel 中查询。首先,获得一个职位。第二,获取所有评论。我的问题是,我无法在 Laravel 查询生成器中正确附加 get() 的两个数组输出。

当我尝试加入他们时,该帖子出现了 3 次,因为我对该帖子有 3 条评论。因此,我没有加入,而是尝试 array_push 他们。现在输出是这样的。

[
    {
    "id": 44,
    "image": "9178hello.jpg",
    "description": "Lorem ipsum dolor sit amit!",
    "address": "internet",
    "lat": 45.435,
    "long": 2312.3,
    "created_at": "1 hour ago"
    },
    [
        {
            "comment": "my comment.... my comment 1.....",
            "created_at": "2015-01-11 17:24:27"
        },
        {
            "comment": "my comment.... my comment 2.....",
            "created_at": "2015-01-11 17:24:29"
        },
        {
            "comment": "my comment.... my comment 3.....",
            "created_at": "2015-01-11 17:24:30"
        }
    ]
]

我怎样才能让它成为:

[
    {
    "id": 44,
    "image": "9178hello.jpg",
    "description": "Lorem ipsum dolor sit amit!",
    "address": "internet",
    "lat": 45.435,
    "long": 2312.3,
    "created_at": "1 hour ago",
    "comments" : { 
           list all the comments here...
         }
    }
]

这是查询:

    $disaster = Disaster::where('name', '=', $name)->first(['id']);

    $post =  DB::table('posts')
                ->join('locations', 'locations.id', '=', 'posts.location')
                ->join('users', 'users.id', '=', 'posts.user_id')
                ->select('posts.id', 'posts.image', 'posts.description', 'locations.address', 'locations.lat', 'locations.long', 'posts.user_id', 'users.firstname', 'users.lastname', 'posts.created_at')
                ->where('posts.disaster_id', '=', $disaster->id)
                ->where('posts.id', '=', $id)
                ->get();

    if (empty($post)) {
        return ['error' => 'no post found'];
    }

    $post[0]->created_at = Carbon::parse($post[0]->created_at)->diffForHumans();

    $comments = DB::table('comments')
                  ->select('comment', 'created_at')
                  ->where('post_id', '=', $post[0]->id)
                  ->get();

    array_push($post, $comments);

    return $post;

最佳答案

你可以这样做

$array = array_merge($post, array('comments' => $comments));

文档:array_merge 这会将带有 comments key 的评论附加到 post 数组。

既然你在使用 Laravel,为什么不使用 Eloquent 关系呢?只需在帖子和评论之间建立一对多关系,然后以任何您想要的方式获取它们。

阅读Laravel Eloquent Relations

关于php - 在 Laravel get() 查询生成器中附加两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27886142/

相关文章:

javascript - Phonegap应用程序与php服务器通信而不使用ip地址

php - 在没有 cron 的情况下在 PHP 中安排任务

php - 对齐字符串中的两个值 (PHP)

php - PHP 的 FILTER_VALIDATE_EMAIL 是否提供足够的安全性?

python - tf.reduce_sum() uint8 出现意外结果

php - 我想在处理时等待 php 函数(来自另一个调用)

Python MySQL 和 Django 问题

javascript - 使用Angular的$http服务调用js文件?

javascript - 对数字进行排序,使偶数在前

java - System.out.println() 输出其他东西