2011-04-16 41 views
4

我如何获得这个工作?没有加入Kohana的表格3.1 ORM

$stuff = ORM::factory('mytable') 
    ->with('user') 
    ->with('other_stuff') 
    ->find_all(); 

我已经得到了我所有的关系,而且所有的似乎是工作,当我做其他查询。但是,在上面的查询中,它没有加入表用户mytable。我想这可能是因为一个mytable可能会有很多用户。

在参考有一个叫join()我认为我可能需要在这里使用的方法,但他们不给它任何信息,我搜索过关于这里的东西确实不行。

当我尝试使用join而不是with时,它试图加入表格,但它不包含任何“加入”信息,只是给出了一个空的()

我知道我的ORM数据库关系都设置正确,所以我有点困惑。

回答

5

Kohana有不错的文档,没有找到正确的地方是...好,你的问题。

ORM::with()用于加载一个对一个(属于并有一个)关系,但你把所有的Database_Query_Builder方法与您的处置ORM使用方法:

$stuff = ORM::factory('mytable') 
     ->join('users','LEFT') 
     ->on('users.mytable_id','=','mytables.id') 
     ->find_all(); 
+0

就是这样。我错过了' - > on()'的东西。 /叹。我没有意识到你可以在ORM中使用DB Query Builder方法。我正在学习Kohana,并且在文档中没有任何关于这个的!但现在我知道了,我非常感谢你的帮助! -Brian – DondeEstaMiCulo 2011-04-16 09:04:22

+0

快速跟进问题...我从所有“with”表中获得正确的DB结果,但没有从“joined”表中得到。除了其他人之外,如何从用户表中获取一个字段的数据?谢谢。 – DondeEstaMiCulo 2011-04-16 10:38:35

+2

- > select('joined_table。*') – Kemo 2011-04-16 11:04:35

1
SELECT * from table1 
LEFT JOIN table2 
ON table1.id = table2.id 
AND table2.flag = 'Y' 
AND table2.siteid = '12' 
WHERE table1.siteid = '12' 

如何以上查询是以kohana的ORM格式编写的?以下是否正确

$stuff = ORM::factory('table1') 
    ->join('table2','LEFT') 
    ->on('table1.id','=','table2.id') 
    ->on('table2.flag','=','Y') 
    ->on('table2.siteid', '=', '12') 
    ->where('table1.id', '=', '12') 
    ->find_all();