如何在 Laravel 雄辩关系中使用查询生成器或原始 SQL


How to use query builder or raw SQL within a Laravel Eloquent relationship

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

这是架构:

表:对象;型号:对象

表:用户;型号:用户

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

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

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

或者,如果无法执行此操作,是否可以从查询生成器查询返回雄辩的模型?

你可以做这样的事情:

    $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);

希望这对您有所帮助!无论如何,祝您圣诞节愉快;)