У меня есть таблица сообщений, в которой есть запрос на соединение с 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 сообщений в базе данных, но запрос возвращает все строки для каждого сообщения, более 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();
Странно то, что SQL-запрос, который показывает laravel "select _3 _. *, _4 _._ 5_ from posts
internal join postimages
on _8 _._ 9_ = _10 _._ 11_ group by _12 _._ 13_", отлично работает в mysql
postimages
строку вы хотите получить? Тот, у которого самый низкийid
? - person Jonas Staudenmeir   schedule 04.04.2018