Laravel多对多关系获取数据

时间:2015-02-05 19:44:37

标签: php mysql laravel-4 many-to-many

这是我的校园模特 为了便于阅读,我删除了模型 当然还有一个名为campus_user的连接表,其id为campus_id,user_id 用户可以订阅校园 现在我想要2件事 1.获取订阅特定校园的所有用户 2.检查特定用户(比如id = 1)是否订阅了特定的校园(比如id = 2)

class Campus extends \Eloquent{
   protected $table = "campuses";

   public function users(){
      return $this->belongsToMany("User");
   }
}

// this is my user model

class User extends Eloquent implements UserInterface, RemindableInterface {

   use UserTrait, RemindableTrait;
   protected $table = 'users';
   protected $hidden = array('password', 'remember_token');

   public function campuses(){
      return $this->belongsToMany('\Models\Campus');
   }
}

1 个答案:

答案 0 :(得分:0)

最“嘲笑”的方式是使用关系查询: http://laravel.com/docs/4.2/eloquent#querying-relations

一个简单的例子是返回任何校园的用户。

// Get users with any campus relationship.
$users = User::has('campuses')->get();

但是你需要更强大的东西。

针对特定“校园”中的“用户”。

// Get 'users' in a 'campus' where the 'name' column equals 'foo'.
$campus = 'foo';

$users = User::whereHas('campuses', function($query) use ($campus) {
    $query->where('name', $campus);
})->get();

对于特定“校园”中的特定“用户”,代码几乎相同。

// Find the 'user' with a primary key of '1' in the 'campus' where
// the 'name' column equals 'foo'.
$primaryKey = 1;
$campus = 'foo';

$users = User::whereHas('campuses', function($query) use ($campus) {
    $query->where('name', $campus);
})->find($primaryKey);

正如您所看到的,最后一个示例替换了上一个示例中的get()方法。 如果要使用主键进行查询,可以使用whereHas()方法中的回调执行相同操作。这将产生以下结果。

...
$query->find($campus);
...

上述所有方法都可以在Illuminate\Database\Eloquent\Builder类中找到。

我建议您查看一些源文件,以便更好地了解请求的处理方式。