2014-12-22 38 views
3

我正在使用Laravel的Eloquent ORM,但想定义一个复杂的关系并想知道在定义关系时是否可以使用查询生成器或原始SQL 。如何在Laravel Eloquent关系中使用查询生成器或原始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 

另外,如果这个不能做,是有可能从一个查询生成器查询返回雄辩模式?

回答

4

你可以做这样的事情:

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

希望这将帮助你! 无论如何都有一个不错的圣诞节;)

+0

非常好,我喜欢它。很简单。不是我以前的100%,但我认为这是一个比我最初走下去的路线更清洁的解决方案!非常感谢你的帮助。 –

相关问题