Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel第二个DB连接选择并按外键值过滤_Php_Mysql_Sql_Laravel - Fatal编程技术网

Php Laravel第二个DB连接选择并按外键值过滤

Php Laravel第二个DB连接选择并按外键值过滤,php,mysql,sql,laravel,Php,Mysql,Sql,Laravel,我有这样的情况: 我在我的laravel应用程序中使用了第二个DB。我使用此方法连接到它并修改/选择数据: $result = DB::connection('mysql_live')->table('users_album') ->where('isApprove', 'Pending')->count(); 我有一个users表,一个用户可以有许多相册图像,因此我有一个users\u相册表。用户可以是活动的或非活动的 表users\u album有一列users\u id

我有这样的情况:

我在我的laravel应用程序中使用了第二个DB。我使用此方法连接到它并修改/选择数据:

$result = DB::connection('mysql_live')->table('users_album')
->where('isApprove', 'Pending')->count();
我有一个
users
表,一个用户可以有许多相册图像,因此我有一个
users\u相册
表。用户可以是
活动的
非活动的

users\u album
有一列
users\u id
,因此我知道哪个相册图像属于哪个用户

现在我需要统计所有活跃用户的相册图像

我可以用ofc。选择所有处于活动状态的用户,并将其id放入一个数组中,然后使用
->进行筛选,其中

$activeUsers = DB::connection('mysql_live')->table('users')
->where('active', '!=', 'inactive')->pluck('id')->toArray();

$result = DB::connection('mysql_live')->table('users_album')->where('isApprove', 'Pending')
->whereIn('user_id', $activeUsers)->count();
但这需要很长时间,如果我选择整个数据集,就会失败,因此显然这不是解决问题的方法

在伪代码中,我需要如下内容:

$result = DB::connection('mysql_live')->table('users_album')->where('isApprove', 'Pending')
->where(USER WITH ID USER_ID IS ACTIVE)->count();
$result_ = array_unique(DB::connection('mysql_live')->table('users_album')->where('isApprove', 'Pending')->pluck('user_id')->toArray());
$users = array_unique(DB::connection('mysql_live')->table('users')->whereIn('id', $result_)->where('active', '!=', 'inactive')->pluck('id')->toArray());
$result = DB::connection('mysql_live')->table('users_album')->where('isApprove', 'Pending')->whereIn('user_id', $users)->count();
编辑:

两个表
users
users\u album
都存储在同一个数据库中,并且具有关系

我之所以提到第二个DB,是因为我不使用雄辩的laravel风格,例如,我不能:
UserAlbum::where('isApprove','Pending')->count()

编辑

我找到了一个“黑客”解决方案,但很难相信必须这样做:

$result = DB::connection('mysql_live')->table('users_album')->where('isApprove', 'Pending')
->where(USER WITH ID USER_ID IS ACTIVE)->count();
$result_ = array_unique(DB::connection('mysql_live')->table('users_album')->where('isApprove', 'Pending')->pluck('user_id')->toArray());
$users = array_unique(DB::connection('mysql_live')->table('users')->whereIn('id', $result_)->where('active', '!=', 'inactive')->pluck('id')->toArray());
$result = DB::connection('mysql_live')->table('users_album')->where('isApprove', 'Pending')->whereIn('user_id', $users)->count();
第一步:我从相册图像中提取所有用户id

第二步:我只选择用户,其中id在先前提取的id数组中,另外我按活动列过滤并再次提取id


第三步:现在,我可以通过使用先前提取的活动用户数组对计数查询进行额外过滤,来计算活动用户的相册图像数。

尝试使用连接:类似于:

$activeUsers = DB::connection('mysql_live')->table('users_album')->join('users','users.id','=','users_album.users_id')
->where('users.active', '!=', 'inactive')->count();
你应该注意你的索引。用户id不好-用户id应该是正确的

编辑:这是一个非常好的例子!


你的问题是什么?如果所有内容都存储在第一个数据库中,您会怎么做?使用适当的索引怎么样?@Nico Haase这些东西都存储在同一个目录中DB@NicoHaase问题是:我需要统计所有的相册图像,它们属于活跃用户,但这不起作用。我假设是因为我使用了一个辅助连接,它不使用雄辩。关系在数据库中定义,但在应用程序中未定义。例如,如果我有:
->hasMany('AlbumImage')
->属于(“用户”)没有定义的关系并不重要,因为关系是在连接中特别指出的。这工作非常好-只是尝试它没有任何问题!你试过了吗?我不这么认为。。。如果你这样做了,你会犯什么错误?我用两张图片更新了我的答案,你可以看到它在工作。我试过了,但它的条目太多了。就我而言,结果应该是171。但它有20多万条参赛作品。我会再给你一次机会让你知道。谢谢你的时间。好的-它应该按预期工作。数据库中的外键可能有问题?我现在有时间再看一遍。我太快放弃了你的解决方案,因为我有一个很好的解决办法。缺少以下内容:
->其中('users\u album.isApprove','Pending')
。谢谢