加入laravel 5.5 [重复]

Posted

技术标签:

【中文标题】加入laravel 5.5 [重复]【英文标题】:Join in laravel 5.5 [duplicate] 【发布时间】:2018-02-02 16:28:04 【问题描述】:

我正在尝试查询我在 laravel 中连续获取新闻中的 cmets 数量。

News TableNews_Comments Table

Display count of comments in 'Kommentare'

这是mysql中的查询。

SELECT news.Id,news.title,news.body,news.created_at, COUNT(news_comments.id) AS Kommentare
FROM news
LEFT JOIN news_comments ON news_comments.fk_news_id = news.id
GROUP BY news.id

Result of this query

我将如何在 laravel 5.5 中编写它?

非常感谢!

【问题讨论】:

请将您的代码放在问题中,而不是图像中 【参考方案1】:

您必须设置 News 和 NewsComments 之间的关系。 在新闻模型中,假设news_commentsNewsComment 模型中,在App 文件夹中。设置关系:

public function newsComments()

    return $this->hasMany('App\NewsComment', 'fk_news_id');

然后,要获得计数,您可以使用count() 方法:

$count = $news->newsComments()->count();

或者,直接使用刀片:

 $news->newsComments()->count() 

【讨论】:

工作完美。感谢您的宝贵时间。【参考方案2】:

为 news 表名 News 和 cmets 表名 Comment 创建一个模型。然后在您的 News 模型中,定义一个 hasMany() 关系方法,例如 -

public function comments()
       return $this->hasMany(Comment::class);

然后在你的控制器中,像这样检索-

$newses = News::with('comments')->get();

这将加载 all 新闻和 corresponding 所有 cmets。如果你想用all cmets 加载single 新闻,那么 -

$news  = News::with('comments')->where('id',$news_id)->first();

要获得count 的评论,您可以count() 关系类似-

$count = News::find($news_id)->comments()->count();

【讨论】:

我也试过了。工作得很好,对我帮助很大!!!感谢您的宝贵时间。 @pyth 欢迎 :) 只是一个问题,以便更好地理解。我的 news_cmets 表中有一个与 users 表相关的 author_id。从字面上看是否是相同的方法,只是 ->hasMany 到 ->hasOne?那么每当我访问 news_comment 模型时,我都会自动访问相应的用户? 好的,我做到了,但是使用 belongsTo,我需要检查何时使用什么。谢谢。 是的,几乎相同,但使用了 belongsTo 而不是 has one

以上是关于加入laravel 5.5 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 gmail 发送 Laravel 5.5 邮件 [重复]

laravel 5.5:php artisan tinker:ErrorException:目录不为空[重复]

2. laravel 5.5 学习 过程中 遇到问题 的 链接

Laravel 5.5 对具有不同列名的单独表的唯一验证规则

Laravel 会话立即过期(Laravel 5.5)

Laravel 5.5:laravel.log 无法打开:权限被拒绝