簡體   English   中英

從正確的表中獲取所有行-雄辯的Laravel

[英]Get All the Rows from RIGHT TABLE - Eloquent Laravel

嗨,我需要來自Right Table的所有行,但是從LEFT JOINED TABLE中僅獲得最后一行。

表結構如下:

表:新聞

id | user_id(pk) | title | name

表格:news_comments

id | user_id(pk) | news_id(pk) | comment

我嘗試過如下:

News::select('news.*', 'users.username', 'users.avatar')
                    ->selectRaw('news_comments.comment')
                    ->join('users', 'users.id', '=', 'news.user_id')
                    ->leftJoin('news_comments', function ($join) {
                        $join->on('news_comments.news_id', '=', 'news.id')
                        ->on('news_comments.user_id', '=', 'users.id');
                    })->get();

但是此查詢僅返回最后一列。 我想要屬於每個新聞的所有評論。 我也嘗試過“戀愛關系”,但我認為在某些時候我錯了。 這個你能幫我嗎。 謝謝

select b.title,b.name,a.comment from news_comments a left join news b on a.user_id = b.user_id;

即使新聞中沒有相應的記錄,這也會從news_comment返回所有記錄。

我還沒有使用過laravel和雄辯,但仍然按照mysql的知識,當您將新聞表連接到news_comment表時,它將從新聞表中獲取所有記錄,並顯示來自news_commet表的最后一條評論,對應於新聞主鍵和NULL值(如果有評論)無法使用。 但是您需要的是來自news_comment的所有注釋,並從news表中顯示其相應的詳細信息,因此您必須使用如下所示的left join查詢,不確定它是否可以工作

DB::table('news_comments')
        ->leftJoin('news', 'news_comments.user_id', '=', 'news.user_id')
        ->get();

通過此查詢,您將獲得來自news_comment表的所有評論以及來自news表的詳細信息

我找到了方法。 我是通過以下方式做到的:

$news = News::select('news.*', 'users.username', 'users.avatar')
                    ->selectRaw('(select count(*) from news_comments where news_comments.news_id = news.id) as comment_count')
                    ->join('users', 'users.id', '=', 'news.user_id')
                    ->get();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM