mysql - 试图将 Eloquent 查询限制为计数为 0 的关系

标签 mysql laravel eloquent

我有两个模型(组织和交互),我想查询没有交互的所有组织的组织模型。组织与交互之间存在一对多关系。

我尝试研究原始 SQL 中的反连接,但一无所获。我还想完全避免任何事情,比如获取所有完整的组织,然后遍历它们以检查它们是否有任何交互,因为考虑到我正在处理的数据量,这是完全不切实际的。

澄清一下,我想避免这种情况:

$organizations = Organization::all();
foreach ($organizations as $org)
    if($org->interactions()->count() == 0){
        //Add the org to an array for later use because it has no interactions
    }

我正在使用 Laravel 3.x,我无法升级,因为该项目非常大,我现在没有一个月的时间升级到 4.1。如果有更好的方法来做这 4 件事情,那将使销售转换过程更容易。

这里是一些相关的代码:

//From organization.php
public function interactions() {
     return $this->has_many('Interaction');
}


//From interaction.php
public function organization() {
     return $this->belongs_to('Organization');
}

最佳答案

//选择至少有 1 次交互的所有组织 ID

$uniqueOrganizationIDs = DB::raw('SELECT organization_id FROM interactions GROUP BY(organization_id)');

//选择不在上面列表中的组织。

Organization::whereNotIn('id', $uniqueOrganizationIDs)->get();

关于mysql - 试图将 Eloquent 查询限制为计数为 0 的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21961887/

相关文章:

mysql - 在单个 mysql 查询中使用大约 50 个 'and' 运算符可以吗?

Python内部数据库使用

mysql - 如何构建预期给定结果的查询

laravel - 抛出 ErrorException 并显示消息“出于安全原因,mail() 已被禁用”

Mysql:从其他表获取值(左连接?)

php - Laravel - 如何在 AppServiceProvider 中获取当前用户

php - 如何在 Laravel 中设置 Eloquent 关系属于通过另一个模型?

database - 使用 Laravel Eloquent 计算用户的第一个答案并忽略其他答案

php - laravel 5.2用户登录时如何获取api_token

php - 如何在通过 Laravel Eloquent 方法连接的元素上使用 orderby