是否可以在不使用关系的情况下连接doctrine ORM中的表? [英] Is this possible to join tables in doctrine ORM without using relations?

查看:114
本文介绍了是否可以在不使用关系的情况下连接doctrine ORM中的表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设有两个表。

 表X-- 
列:
id x_value

表Y--
列:
id x_id y_value

现在我不想在doctrine类中定义关系,我想使用这样的查询使用这两个表来检索一些记录:

 从x,y中选择x_value,其中y.id =variable_z,x.id = y.x_id; 

我无法弄清楚如何在doctrine orm中写这样的查询



编辑:



表结构:



表1:

  CREATE TABLE IF NOT EXISTS`image`(
`id` int(11)NOT NULL AUTO_INCREMENT,
`random_name` varchar(255)NOT NULL,
`user_id` int(11)NOT NULL,
`community_id` int(11)NOT NULL,
`发布`varchar(1)NOT NULL,
PRIMARY KEY(`id`)
)ENGINE = InnoDB DEFAULT CHARSET = latin1 AUTO_INCREMENT = 259;

表2:

  CREATE TABLE IF NOT EXISTS`users`(
`id` int(11)NOT NULL AUTO_INCREMENT,
`city` varchar(20)DEFAULT NULL,
`state `varchar(20)DEFAULT NULL,
`school` varchar(50)DEFAULT NULL,
PRIMARY KEY(`id`)
)ENGINE = InnoDB DEFAULT CHARSET = latin1 AUTO_INCREMENT = 20;

查询我正在使用:

  $ q =新Doctrine_RawSql(); 

$ q - > select('{u。*},{img。*}')
- > from('users u LEFT JOIN image img ON u.id = img.user_id')
- > addComponent('u','Users u')
- > addComponent('img','u.Image img')
- > where(img.community_id ='$ community_id'AND img.published ='y'AND u.state ='$ state'AND u.city ='$ city
- > orderBy('img.id DESC ')
- > limit($ count + 12)
- > execute();

错误我得到:

 致命错误:未捕获异常'Doctrine_Exception'与消息'无法找到C:\xampp\htdocs\fanyer\doctrine\lib\Doctrine\Table.php中的
u':堆栈跟踪:#0
C:\xampp\\ \\ htdocs\fanyer\doctrine\lib\Doctrine\Table.php(240):Doctrine_Table-> initDefinition()#1 C:\xampp\htdocs\fanyer\doctri ne \lib\Doctrine\Connection.php(1127):
Doctrine_Table-> __ construct('u',Object(Doctrine_Connection_Mysql),true)#2
C:\xampp\ htdocs\fanyer\doctrine\lib\Doctrine\RawSql.php(425):Doctrine_Connection-
> getTable('u')#3 C:\xampp\htdocs\fanyer\\ \\ doctrine\models\Image.php(33):Doctrine_RawSql-
> addComponent('img','u.Image imga')#4 C:\xampp\htdocs\fanyer\ community_images.php(31):
Image-> get_community_images_gallery_filter(4,0,'AL','ALBERTVILLE')#5 {main}抛出
C:\xampp\htdocs\ fanyer\doctrine\lib\Doctrine\Table.php第290行


解决方案尝试这样的东西:---

  $ q = new Doctrine_RawSql(); 
$ this-> related_objects = $ q->
select('{o.name}') - >来自('tagset t1 JOIN tagset t2 ON t1.tag_id = t2.tag_id AND t1.object_id!= t2.object_id JOIN object o ON t2.object_id = o.id')的
- >
addComponent('o','Object o') - >
其中('t1.object_id =?',$ this-> object-> id) - >
groupBy('t2.object_id') - >
orderBy('COUNT(*)DESC') - >
execute();


Suppose there are two tables.

Table X--
Columns:
     id         x_value

Table Y--
Columns:
     id        x_id      y_value

Now I dont want to define relationship in doctrine classes and i want to retrieve some records using these two tables using a query like this:

Select x_value from x, y where y.id="variable_z" and x.id=y.x_id;

I m not able to figure out how to write query like this in doctrine orm

EDIT:

Table structures:

Table 1:

CREATE TABLE IF NOT EXISTS `image` (
  `id` int(11) NOT NULL AUTO_INCREMENT, 
`random_name` varchar(255) NOT NULL,
 `user_id` int(11) NOT NULL,
  `community_id` int(11) NOT NULL,
  `published` varchar(1) NOT NULL,
  PRIMARY KEY (`id`)
 ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=259 ;

Table 2:

  CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
   `city` varchar(20) DEFAULT NULL,
   `state` varchar(20) DEFAULT NULL,
   `school` varchar(50) DEFAULT NULL,
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=20 ;

Query I am using:

        $q = new Doctrine_RawSql();

        $q  ->select('{u.*}, {img.*}')
        ->from('users u LEFT JOIN image img ON u.id = img.user_id')
        ->addComponent('u', 'Users u')
        ->addComponent('img', 'u.Image img')
        ->where("img.community_id='$community_id' AND img.published='y' AND u.state='$state' AND u.city='$city
        ->orderBy('img.id DESC')
        ->limit($count+12)  
        ->execute();        

Error I am getting:

 Fatal error: Uncaught exception 'Doctrine_Exception' with message 'Couldn't find class
 u' in C:\xampp\htdocs\fanyer\doctrine\lib\Doctrine\Table.php:290 Stack trace: #0 
 C:\xampp\htdocs\fanyer\doctrine\lib\Doctrine\Table.php(240): Doctrine_Table-   >initDefinition() #1 C:\xampp\htdocs\fanyer\doctrine\lib\Doctrine\Connection.php(1127): 
Doctrine_Table->__construct('u', Object(Doctrine_Connection_Mysql), true) #2 
C:\xampp\htdocs\fanyer\doctrine\lib\Doctrine\RawSql.php(425): Doctrine_Connection-
>getTable('u') #3 C:\xampp\htdocs\fanyer\doctrine\models\Image.php(33):    Doctrine_RawSql-
>addComponent('img', 'u.Image imga') #4   C:\xampp\htdocs\fanyer\community_images.php(31): 
  Image->get_community_images_gallery_filter(4, 0, 'AL', 'ALBERTVILLE') #5 {main} thrown      in 
    C:\xampp\htdocs\fanyer\doctrine\lib\Doctrine\Table.php  on line 290

解决方案

Try something like this:---

$q = new Doctrine_RawSql();
$this->related_objects = $q->
        select('{o.name}')->
        from('tagset t1 JOIN tagset t2 ON t1.tag_id = t2.tag_id AND t1.object_id != t2.object_id JOIN object o ON t2.object_id = o.id')->
        addComponent('o','Object o')->
        where('t1.object_id = ?', $this->object->id)->
        groupBy('t2.object_id')->
        orderBy('COUNT(*) DESC')->
        execute();

这篇关于是否可以在不使用关系的情况下连接doctrine ORM中的表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆