【问题标题】:How to use query builder or raw SQL within a Laravel Eloquent relationship如何在 Laravel Eloquent 关系中使用查询构建器或原始 SQL
【发布时间】:2014-12-22 13:09:04
【问题描述】:

我正在使用 Laravel 的 Eloquent ORM,但想定义一个复杂的关系,并且想知道在定义关系时是否可以使用查询构建器或原始 SQL。

这是架构:

表:对象;模型:对象

表:用户;型号:用户

表:objects_users;关系:ManyToMany - 一个对象可以被多个用户拥有,一个用户可以拥有多个对象。

对于普通记录,即单独输入到数据透视表中的记录,使用传统关系可以正常工作。但是,我还想根据其他条件返回其他结果;即,如果设置了调试器标志,则允许所有对象属于用户。本质上,我想模仿这个查询:

SELECT objects.*
FROM objects
LEFT JOIN objects_users ON objects.id = objects_users.object_id
INNER JOIN users ON
    objects_users.user_id = users.id
    OR users.debugger = 1

或者,如果无法做到这一点,是否可以从查询构建器查询中返回 eloquent 模型?

【问题讨论】:

    标签: php sql laravel laravel-4 eloquent


    【解决方案1】:

    你可以这样做:

        $objects = DB::select('select objects.* from objects 
        LEFT JOIN objects_users ON objects.id = objects_users.object_id
        INNER JOIN users ON
        objects_users.user_id = users.id
        OR users.debugger = 1');`
    

    之后,您可以像这样将原始结果对象“转换”为您指定的模型:

    $objArray = array();
    $objArray = YourObjectModel::hydrate($objects);
    

    希望对您有所帮助! 不管怎样,祝你圣诞快乐;)

    【讨论】:

    • 好极了,我喜欢。非常简单。不是我所追求的 100%,但我认为这是一个比我最初走的路线更清洁的解决方案!非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-02-07
    • 2015-04-09
    • 1970-01-01
    • 2018-10-11
    • 2012-12-08
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多