我有两个模型(组织和交互),我想查询没有交互的所有组织的组织模型。组织与交互之间存在一对多关系。
我尝试研究原始 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/