Laravel对联接结果的区别在查询构建器

时间:2018-04-03 17:12:34

标签: laravel join laravel-query-builder laravel-5.6

我有一个帖子表,其中包含4个其他表的连接查询。其中3个是一对一关系,但第4个是一对多关系。我希望查询每个帖子只返回1行。我到目前为止所尝试的是这样的 -

$query = DB::table('posts')
                ->select('posts.*',
                        'subcategories.subcategory_title_en',
                        'subcategories.subcategory_title_bn',
                        'categories.category_title_en',
                        'categories.category_title_bn',
                        'users.*',
                        'postimages.postimage_thumbnail'
                        )
                ->join('subcategories', 'subcategories.subcategory_id', '=', 'posts.subcategory_id')
                ->join('categories', 'categories.category_id', '=', 'subcategories.parent_category_id')
                ->join('users', 'users.id', '=', 'posts.user_id')
                ->join('postimages', 'postimages.post_id', '=', 'posts.post_id');

        $query->groupBy('posts.post_id');

        echo $query->count();
        exit();

我目前在数据库中有50个帖子,但查询会返回每个postimages的所有行,每个帖子的行数超过1行。我认为不同只会显示每个post_id一次?我在这里缺少什么?

如果有人告诉我如何使用查询构建器执行此操作,我更愿意。因为这将在不同的列上进行大量搜索,并且我希望它尽可能快。

这是一个更简单的版本 -

 $query = DB::table('posts')
                ->select('posts.*','postimages.postimage_thumbnail')
                ->join('postimages', 'postimages.post_id', '=', 'posts.post_id')
                ->groupBy('posts.post_id');


        echo $query->count();
        exit();

奇怪的是laravel"显示的SQL查询。从posts上的postimages内部加入postimage_thumbnail选择posts。*,postimagespostimagespost_id = {{1} } posts分组post_idposts"在mysql中正常工作

1 个答案:

答案 0 :(得分:2)

你应该使用groupby

试试此代码

clang++-5.0 hello.cpp -fdenormal-fp-math=preserve-sign

在" mysql"中的config / database.php中改变:严格' =>是,为假