如何使用数据透视表使用laravel4中的pivot上的where条件获取数据

时间:2015-10-27 10:46:07

标签: php mysql laravel-4 pivot

如何使用belongsToMany关系模型获取数据。

Table tags
  - id
  - name
  ...

Table photo_entries
  - id
  ...

Table photo_entry_tag
  - id
  - tag_id
  - photo_entry_id

Tag.php

public function photo_entry()
{
    return $this->belongsToMany('PhotoEntry');
}

PhotoEntry.php

public function tags()
{
    return $this->belongsToMany('Tag');
}

现在,我需要使用photo entries标记从photo_entries表格中抓取where tag_id=1

我试过这个:

$photos = PhotoEntry::orderBy('votes', 'desc')->with(array('tags' => function($query)
{
   $query->where('tag_id', 1); 
}))->paginate(50);

但它没有给我正确的结果,它返回所有照片。我没有得到什么问题。

任何人都可以帮助我。

1 个答案:

答案 0 :(得分:0)

您需要从 photo_entry_tag 表格中选择 photo_entries 表中的所有记录,以便您的查询应该像这样

$tag_id = 1;
$query = "SELECT * FROM `photo_entries` WHERE `id` IN (SELECT `photo_entry_id` FROM `photo_entry_tag` WHERE `tag_id` = {$tag_id})";

eloquent中的等价代码也将如下面的代码

$tag_id = 1;
$photos = PhotoEntry::whereIn('id', function($query) use ($tag_id) {
    $query->select('photo_entry_id')->from('photo_entry_tag')->whereTagId($tag_id
);
})->get();

您也可以在orderBy('votes', 'desc')之前添加get()来对结果进行排序