通过id查找Eloquent ORM并将where子句添加到关系模型中

时间:2014-06-30 22:03:23

标签: laravel-4 eloquent

嘿伙计们你好吗? 我试图通过id简单地找到并同时保证关系表中的列具有值。 我尝试了一些但没有任何作用。

$tag = Tag::find($id)->whereHas('posts', function($q){
    $q->where('status','=', 1);
})->get();

此外:

$tag = Tag::whereHas('posts', function($q) {
    $q->where('status','=', 1);
})->where('id','=', $id)->get();
你能帮帮我吗?

这是一件简单的事情,但我无法做到这一点......

2 个答案:

答案 0 :(得分:1)

您需要阅读Eloquent个文档。了解findfirstget的内容。

您的代码可以满足您的需求,甚至更多(虽然有点不对);)

$tag = Tag::find($id) // here you fetched the Tag with $id
        ->whereHas('posts', function($q){  // now you start building another query
    $q->where('status','=', 1);
})->get();  // here you fetch collection of Tag models that have related posts.status=1

所以,这就是你想要的:

$tag = Tag::whereHas('posts', function($q){
    $q->where('status','=', 1);
})->find($id);

如果没有匹配Tag子句或给定null的行,它将返回where模型或$id

答案 1 :(得分:0)

您检查过Query Scope吗?

你可以这样做:

$tag = Tag::where('status', '=', 1)
           ->where('id', '=', 1, $id)
           ->get();