【问题标题】:Laravel Many To Many Relationship getting dataLaravel 多对多关系获取数据
【发布时间】:2015-04-05 19:45:12
【问题描述】:

这是我的校园模型 我已经剥离了模型以提高可读性 当然还有一个名为 Campus_user 的连接表,其 id、campus_id、user_id 用户可以订阅校园 现在我想要两件事 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');
   }
}

【问题讨论】:

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


    【解决方案1】:

    嗯,最“雄辩”的方式是使用关系查询: 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 类中找到。

    我建议查看一些源文件,以更好地了解如何处理请求。

    【讨论】:

      猜你喜欢
      • 2019-05-23
      • 1970-01-01
      • 1970-01-01
      • 2021-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多