【问题标题】:Laravel Custom RelationshipLaravel 自定义关系
【发布时间】:2018-10-20 19:35:32
【问题描述】:

非常愚蠢的情况,关键是我无法更改数据库架构,因为它是一个正在运行的电子商务业务,拥有超过 100 万活跃用户。

这是我的情况。

表用户: 表格存储:

两者都有相同的主键,这意味着我们可以调用一对一的关系。 但是现在我必须创建属于许多关系表单 Store 到 User。

存储表有两列

  1. 蛞蝓
  2. 父ID

现在我需要让所有用户都拥有大量的商店

所以我的查询是

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

如何在这种情况下创建关系。

【问题讨论】:

  • 等等,用户和商店的id是一样的..?在覆盖键时使用HasOne 关系怎么样?喜欢$userModel->HasOne('store', 'id', 'id')。但是,where slug = ? 在关系定义上有点困难,你可以赌User::with('store', function($q){ $q->whereNotNull('slug') })->get()。我可以这样想,但我已经好几年没有摆弄 laravel >.
  • nops 情况是用户将在商店中拥有并且商店可以拥有许多用户,但识别键现在是商店 slug 而不是 id。如果我要对用户 > 商店执行一对一的关系,那么我需要检查商店的 parentId,如果商店有父 ID,那么目标商店将具有与商店相同的 slug,但父 id 为空。
  • 这有意义吗?
  • 嗨@MoeenBasra,我认为这个问题并不完全清楚。我对用户和商店的 ID 有同样的问题,您的回答让我无法更清楚。也许您可以添加您的数据库图并说明:(1)什么是当前行为和(2)什么是期望行为。我要么看到更新 db 模式会出现什么问题,即使它是一个 100 万用户的 prd 应用程序。如果您对此有实际需求,这不是微不足道的,但也不是不可能的。
  • 我正在添加一个小架构 sn-p 请再看看

标签: php mysql laravel


【解决方案1】:

你好,我会尽量详细回答。

创建以下关系:

对于商店:

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);
}

上面的函数将返回一个用户集合,他们的'id'等于存储'slug'

如果您有很多商店,您可以执行以下操作:

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。 你有 50,000 个用户。其中有 10,000 个有 slug xyz。你需要那 10,000 个用户的信息。如果是这样的话,那么下面的代码会帮助你。

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);

}

这将返回一个用户数组,这些用户的 slug 字段中具有 $slugtomatch 值。

【讨论】:

  • 感谢您的贡献,但我猜您没有正确理解我的问题我刚刚更新了问题并添加了一个小型架构示例。
  • 所以您需要那些实际的商店用户(父 ID 不为空)?
  • 我需要所有用户都拥有相同的 slug。例如,主商店有一个 slug 'abc' 然后我需要获取所有具有 slug 'abc' 的用户的 ID 现在我有用户 ID 现在我需要获取用户。这是我心中的一种解决方案,但也许你可以给我一些很好的例子。
  • 我已经更新了我的答案,看看,如果这就是你想要的,请告诉我。
  • 这种方法是手动的,我已经在使用了。我需要使用相同方法从商店到用户的动态关系。
猜你喜欢
  • 2017-01-05
  • 2018-10-16
  • 2021-11-09
  • 2023-04-01
  • 1970-01-01
  • 2018-05-05
  • 2019-02-09
  • 2019-03-22
相关资源
最近更新 更多