我是Laravel的新手,所以我不知道究竟是什么问题。所以我将详细描述它。首先我有2个表文章和评论,关系1-1,这意味着一篇文章只能有1个评论。 代码是:
$article = Article::with('comments')
,结果是
及以下是我得到的评论的属性:
但是现在,我希望构建器只选择文章内容长度>的文章。其评论的内容长度。在MySQL语句中,它是
"Select from articles a where length(a.content) > (Select length(c.content) from comments c where c.article_id = a.id)
我尝试过使用原始和加入,但它确实有效。但我想知道我可以用“与”关系做同样的事情吗?我怎么能这样做?
答案 0 :(得分:0)
试试这个
$ article = Article :: where(DB :: raw('length(content)','>',DB :: raw('从article_id = id'的评论中选择长度(内容)) - &gt ;与([ '注释']) - >得到();
答案 1 :(得分:0)
试试这个:
$articles = Article::with('comments')->get();
$onlyWithLongerContent = $articles->filter(function($article) {
return strlen($article->content) > strlen($article->comments->content);
})->values();
我会尝试另一种方式,但这是一种方法。
另一种方法可能是使用join和where子句构建查询。
答案 2 :(得分:0)
你有没有试过这样的事情:
/**
* Get the comments.
*
* @return
*/
public function comments()
{
return $this->hasmany('App\Comments')->where('content', '!=', null);
}
或
/**
* Get the comments
*
* @return
*/
public function comments()
{
return $this->hasManyThrough('App\Comments', 'App\Articles', 'id', 'article_id')->where('content', '!=', null);
}