Php 查询关系雄辩

Php 查询关系雄辩,php,laravel,laravel-4,eloquent,Php,Laravel,Laravel 4,Eloquent,我有Newsmodel,而且News有很多评论,所以我在Newsmodel中这样做: public function comments(){ $this->hasMany('Comment', 'news_id'); } 但我在注释表中也有字段垃圾,我只想选择没有垃圾的注释。所以把1号垃圾处理掉了。所以我想知道有没有这样的方法: $news = News::find(123); $news->comments->where('trashed', '<>',

我有
News
model,而且
News
有很多评论,所以我在
News
model中这样做:

public function comments(){
    $this->hasMany('Comment', 'news_id');
}
但我在
注释表中也有字段
垃圾
,我只想选择没有垃圾的注释。所以
把1号垃圾处理掉了。所以我想知道有没有这样的方法:

$news = News::find(123);
$news->comments->where('trashed', '<>', 1); //some sort of pseudo-code
$comments = Comment::where('trashed', '<>', 1)
    ->where('news_id', '=', $news->id)
    ->get();
$news=news::find(123);
$news->comments->where('trashed','',1)//某种伪代码
有没有一种方法可以使用上述方法,或者我应该这样写:

$news = News::find(123);
$news->comments->where('trashed', '<>', 1); //some sort of pseudo-code
$comments = Comment::where('trashed', '<>', 1)
    ->where('news_id', '=', $news->id)
    ->get();
$comments=Comment::where('trashed','',1)
->其中('news_id','=',$news->id)
->get();

任何一个都应该适合你,选择你最喜欢的:

  • 急切的装载

    $comments = News::find(123)->with(['comments' => function ($query) {
        $query->where('trashed', '<>', 1);
    }])->get();
    


  • 不过,我还是忍不住注意到,您可能正在尝试处理软删除,而Laravel有内置的功能来帮助您做到这一点:

    您只需在雄辩的模型文件中即可。 这样做:

    public function comments_with_deleted()
    {
        return $this->belongsTo('Comments', 'id')->where('deleted', 1);
    }
    
    public function comments()
    {
        return $this->belongsTo('Comments', 'id');
    }
    
    这样称呼:

    // for show comments with deleted
    $comments = News::find(123)->with('comments_with_deleted');
    
    // for show comments without deleted
    $comments = News::find(123)->with('comments');
    

    rmobis的答案是我所需要的,但它在当前的Laravel 5中抛出了一个错误。您现在必须将其用作关联数组:

    $comments = News::find(123)->with(
        ['comments' => function ($query) {$query->where('trashed', '<>', 1);}]
    );
    
    $comments=News::find(123)->with(
    ['comments'=>函数($query){$query->where('trashed','',1);}]
    );
    
    我花了一些时间才弄明白,希望这能帮助别人


    阅读Laravel的文档(5.6)中的更多内容:

    我已经实现了软删除,但我也希望评论未发布但不删除。我也有删除选项