使用join in laravel在集合中查找
如何使用laravel查询获得所需的输出。尝试这种方式不会成功,请提前多多指导感谢 如果可能的话,我们有什么办法可以在模型中设置它吗?请指导使用join in laravel在集合中查找,laravel,laravel-5,Laravel,Laravel 5,如何使用laravel查询获得所需的输出。尝试这种方式不会成功,请提前多多指导感谢 如果可能的话,我们有什么办法可以在模型中设置它吗?请指导 User id name b_id 1 Alax 1,3 2 Rex 2,4 3 Lex 2,3 Books id book_name book_author 1 Javascript jim 2 PHP json 3 LARAVEL rax 4 SYMPHON
User
id name b_id
1 Alax 1,3
2 Rex 2,4
3 Lex 2,3
Books
id book_name book_author
1 Javascript jim
2 PHP json
3 LARAVEL rax
4 SYMPHONY Alax
Output
id name b_id
1 Alax Javascript, LARAVEL
2 Rex PHP, SYMPHONY
3 Lex PHP, LARAVEL
和查询:
$res = DB::table('user')->leftJoin('book', function($join){
$join->on(DB::raw("find_in_set(book.id, user.b_id)",DB::raw(''),DB::raw('')));
});
我不知道您目前面临的确切Laravel语法问题,但您当前的左连接逻辑存在潜在问题。如果一个给定的用户有多个匹配的书籍,那么他将在结果集中为每个匹配出现一次。这可能不是您想要的,因此我建议使用
EXISTS
逻辑加入:
SELECT u.id, u.name
FROM User u
WHERE EXISTS (SELECT 1 FROM Books b WHERE FIND_IN_SET(b.id, u.b_id) > 0);
Laravel代码:
$res = DB::table('user u')
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('book b')
->whereRaw('FIND_IN_SET(b.id, u.b_id) > 0');
})
->get();
exists方法确保每个用户在结果集中只出现一次。试试这个
$data = \DB::table("user")
->select("user.*",\DB::raw("GROUP_CONCAT(book.book_name) as book_name"))
->leftjoin("book",\DB::raw("FIND_IN_SET(book.id,user.b_id)"),">",\DB::raw("'0'"))
->get();
\DB::raw("GROUP_CONCAT(CONCAT(book.book_name, ' - ', book.book_author) SEPARATOR ', ') AS book_name_author")
您的输出看起来像
Illuminate\Support\Collection Object
(
[items:protected] => Array
(
[0] => stdClass Object
(
[id] => 1
[name] => Alax
[b_id] => 1,3
[book_name] => Javascript,LARAVEL
)
[1] => stdClass Object
(
[id] => 2
[name] => Rex
[b_id] => 2,4
[book_name] => PHP,SYMPHONY
)
[2] => stdClass Object
(
[id] => 3
[name] => Lex
[b_id] => 2,3
[book_name] => PHP,LARAVEL
)
)
)
很好,假设我们想连接两列book_name和book_author,然后\DB::raw(“GROUP_CONCAT(book.book_name)as book_name”))如何连接book_author?book_author表在哪里?我没有看到任何有问题的地方?只是更新了问题,只是想把作者的名字也浓缩起来
\DB::raw(“GROUP_CONCAT(CONCAT(book.book_name,“-”,book.book_author)SEPARATOR“,”)作为书的作者”)
试试看,我希望这本书是关于Symfony的,而不是关于Symphony的?)