Php 检索基于它的雄辩模型';这是多对多的关系

Php 检索基于它的雄辩模型';这是多对多的关系,php,laravel,eloquent,Php,Laravel,Eloquent,假设我有一个博客模型、帖子模型和一个照片模型 一个博客可以有很多帖子 文章属于博客 一篇文章属于许多照片 一张照片属于许多帖子 我想做的是在一个特定的博客上找到一个特定的帖子,上面有两张特定的照片 我正在努力用雄辩的语言检索这张帖子记录 $post = Post::where('blog_id', $blog->id) ->whereHas('photos', function($q) { $q->where('photo_i

假设我有一个博客模型、帖子模型和一个照片模型

  • 一个博客可以有很多帖子
  • 文章属于博客
  • 一篇文章属于许多照片
  • 一张照片属于许多帖子
我想做的是在一个特定的博客上找到一个特定的帖子,上面有两张特定的照片

我正在努力用雄辩的语言检索这张帖子记录

    $post = Post::where('blog_id', $blog->id)
        ->whereHas('photos', function($q) {
            $q->where('photo_id', 180)->where('photo_id', 181);
        })->firstOrFail();
每个博客中只有一个实例在一篇文章中使用了这两张照片


有什么建议吗?

您可以使用
其中

$post=post::where('blog_id',$blog->id)
->何处有(‘照片’、功能($q){
$q->其中('photo_id',[180181]);
})
->firstOrFail();

那么您在查询中面临的问题是什么呢?它不起作用。我已经在数据库中验证了记录是用来提取这个的。当您执行
$q->where('photo\u id',180)->where('photo\u id',181)
就像photo_id=180和photo_id=181一样,所以它自然不起作用。使用
发布了一个答案,其中
有效。几分钟后我会接受的,只要它允许谢谢你能在那里做第一件事还是创造?@ahackney不行。firstOrCreate具有firstOrCreate(数组$attributes,数组$values)的签名,其中$attributes包含$key=>$value对,根据这些对对对数据库中的现有记录进行搜索。如果未找到记录,则将创建一个具有$values的新记录。在您的情况下,如果您想检查是否存在与给定id的两张照片关联的帖子,如果不创建新的帖子记录,您可以先写,而不是先写或失败。然后,如果$post(由first()返回)为空,则创建一条新记录
    $post = Post::where('blog_id', $blog->id)
        ->whereHas('photos', function($q) {
            $q->where('photo_id', 180)->where('photo_id', 181);
        })->firstOrFail();