关系

时间:2018-01-12 03:09:59

标签: mysql laravel migration relation

我是Laravel的新手,所以我不知道究竟是什么问题。所以我将详细描述它。首先我有2个表文章评论,关系1-1,这意味着一篇文章只能有1个评论。 代码是:

$article = Article::with('comments')

,结果是

enter image description here

及以下是我得到的评论的属性:

enter image description here

但是现在,我希望构建器只选择文章内容长度>的文章。其评论的内容长度。在MySQL语句中,它是

"Select from articles a where length(a.content) > (Select length(c.content) from comments c where c.article_id = a.id)

我尝试过使用原始加入,但它确实有效。但我想知道我可以用“”关系做同样的事情吗?我怎么能这样做?

3 个答案:

答案 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);
}