代码之家  ›  专栏  ›  技术社区  ›  Moeen Basra

拉维尔习俗关系

  •  0
  • Moeen Basra  · 技术社区  · 6 年前

    enter image description here

    表用户: 表存储:

    两者都有相同的主键,这意味着我们可以调用一对一关系。

    存储表有两列

    1. 鼻涕虫

    所以我的问题是

    select * from users where id IN (select id from store where slug = ?);
    

    1 回复  |  直到 6 年前
        1
  •  0
  •   Amir    6 年前

    嘿,我会尽量详细地回答。

    创建以下关系:

    对于商店:

    public function users(){
       return $this->hasMany(User::class, 'id' ,'slug');
    }
    

    对于用户:

    public function store(){
       return $this->belongsTo(Store::class);
    }
    

    创建一个新控制器并编写一个新函数,如下所示:

    public function getStoreUsers(){
      $users = Store::where('slug','yourvalue')->firstOrFail()->users;
      return response()->json($users);
    }
    

    如果你有很多商店,你可以做以下事情:

    public function getStoreUsers(){
     $stores = Store::all();
     $storeUsers;
    
     foreach($stores as $store){
       $users = $store->users;
       $storeUsers[$store['id']] = array($users);
       return response()->json($storeUsers);
     }
    }
    

    此函数将返回每个商店的用户数组。

    更新:

    这是我从你的要求中所能理解的。

    存储a、存储b、存储c具有slug=xyz。 你有50000个用户。其中10000个有slug xyz。你需要那10000个用户的信息。如果是这种情况,那么下面的代码将帮助您。

    public function getStoreUsers(){
       $slugtomatch = 'xyz';
       $result;
       $stores = Store::where('slug',$slugtomatch)->get();
    
    foreach($stores as $store){
       $users = $store->users;
       $result = array($users);
      }
    
    return response()->json($result);
    
    }