laravel雄辩的相关关系只有第一个记录

时间:2014-10-06 12:53:36

标签: orm eloquent relationship record

我有一张桌子上有产品,另一张桌子上有产品的动作(加法,减法)和这些动作的作者表。 我想在Eloquent ORM中获得最后一个动作的所有产品 我试过......

        $products = Product::with( array
        (
            'movs' => function ( $query )
            {
                $query->orderBy( 'id', 'dsc' )->with('author')->first();
            }
        ) )->get();

但只获得一个归零的movs数组。

但是当我做的时候

        $products = Product::with( array
        (
            'movs' => function ( $query )
            {
                $query->orderBy( 'id', 'dsc' )->with('author');
            }
        ) )->get();

我得到所有相关的相关模型(movs和authors)...有没有办法在Eloquent中获得这个或者我与查询构建器有关...如果是这样......怎么样?

提前谢谢你。

2 个答案:

答案 0 :(得分:0)

嗯......不可能用Eloquent构建......不可能使用查询构建器构建(使用db raw时出错)所以......最后用mysql和DB构建:: select

句子说选择最后一次运动的产品和运动的作者。 (如果没有动作则为空)

依赖最后一次移动而不是最后一次移动

        $mq =  "select *
            from products
            left join
            (
                    select concat (users.first_name,' ', users.last_name) as author,
                    from users
                    join (
                                select *
                                from movs
                                join (
                                        select max(movs.id) as id
                                        from movs
                                        group by product_id
                                        ) as movsids
                                on (movsids.id = movs.id)
                    )
                    as movuser
                    on movuser.author_id = users.id
            )
            as last_movs
            on products.id = last_movs.product_id";

        return DB::select($mq);

答案 1 :(得分:0)

您必须创建一个新的关系,即hasOne而不是hasMany。

这是解决方案: http://alexkaye.co.uk/2015/01/04/eloquent-get-first-last-related-row/