Laravel keyBy - 从链接表中排序结果

时间:2017-05-03 12:11:08

标签: php laravel

我有一个BlogPost模型,它有一个名为images的belongsToMany关系,这个关系使用一个链接表将博客帖子ID与图片ID相关联。

在提取博客文章的数据时,images属性如下所示:

[images] => Array
            (
                [0] => Array
                    (
                        [id] => 8304
                        [original] => /img/blog/2017/5/wifiradio_original_59089cae673db.png
                        [large] => /img/blog/2017/5/wifiradio_large_59089cae673db.jpg
                        [medium] => /img/blog/2017/5/wifiradio_medium_59089cae673db.jpg
                        [small] => /img/blog/2017/5/wifiradio_small_59089cae673db.jpg
                        [name] => wifiradio.png
                        [alt] => wifiradio.png
                        [created_at] => 2017-05-02 14:50:22
                        [updated_at] => 2017-05-02 14:50:22
                        [pivot] => Array
                            (
                                [blog_post_id] => 47749
                                [image_id] => 8304
                                [id] => 136949
                                [type] => featured
                            )

                    )

            )

    )

数组键没有用作数值,我希望数组键是pivot-> type的值。

Laravels keyBy方法几乎可以满足我的需要,但我不能让它直接处理返回的数据。

是否可以在模型中使用keyBy,以便始终以可用的格式返回数据?

1 个答案:

答案 0 :(得分:1)

我通过在控制器中格式化数组来解决这个问题。 这是我创建的函数,如果有人有类似问题:

public function formatPosts($posts){
    foreach($posts as $post){
        $images = collect($post->images);
        unset($post->images);
        $post->images = $images->keyBy('pivot.type');
    }
    return $posts;
}