加入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_comments
在NewsComment
模型中,在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 学习 过程中 遇到问题 的 链接