Eager使用不同的Scope过滤器两次加载Laravel关系

时间:2017-01-05 15:18:10

标签: laravel laravel-4 eloquent eager-loading

我在Laravel 4.2工作。我有三个感兴趣的模型,儿童,家庭和地址。家庭与孩子有一对多的关系,并且因为系统跟踪家庭移动性,它与地址有一对多的关系。我尝试通过急切加载为单个Child返回两个不同的地址(技术上两个地址集合,每个地址只包含一个实例),在地址上使用两个不同的范围来获得原始"限定&# 34;学年的地址以及孩子的最终地址。正如您在下面的代码中所看到的,我已经依次在家庭和地址(" qualifyingAddresses"基本上作为"地址"的别名)之间建立两种不同的关系能够同时返回两个范围的查询。它有效,但我想看看是否有人有任何替代品并没有涉及到什么感觉像黑客。我怎么能通过Eloquent做到这一点(我发现使用DB ::甚至比这个特定的解决方法更不优雅)?

    $query = Child::orderBy('last_name')->orderBy('first_name');
    $query->with( 
        array( 
            'family'=>function($query) use($school_year_id) {
                $query->select('families.*')->with( 
                    array(
                        'qualifyingAddresses'=>function($query2) use ($school_year_id){
                            $query2->whereQualifyingFirst($school_year_id)->select('family_addresses.*');
                        },
                        'addresses'=>function($query3) use ($school_year_id){
                            $query3->whereFinal($school_year_id)->select('family_addresses.*');
                        }
                    )
                );
            }
        )
    );

0 个答案:

没有答案