我正在用我自己的框架编写CMS,使用doctrince 2.5 +。
我的数据库表如下:
Item
表:
+---------------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| owner_id | int(11) | NO | MUL | NULL | |
| item_id | int(7) | NO | MUL | NULL | |
| count | bigint(20) | NO | | NULL | |
| money | varchar(32) | NO | | NULL | |
| name | varchar(32) | NO | | NULL | |
+---------------------+-------------+------+-----+---------+-------+
Person
表:
+------------------------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+----------------------+------+-----+---------+-------+
| Id | int(11) | NO | PRI | 0 | |
| name | varchar(35) | NO | UNI | | |
| age | int | NO | | | |
+------------------------+----------------------+------+-----+---------+-------+
我声明了这样的模型:
Item.php
class Item{
/** @id @Column(type="integer", name="id")**/
public $id;
/** @Column(type="integer", name="owner_id")**/
public $owner_id;
/** @Column(type="integer", name = "item_id")**/
public $item_id;
/** @Column(type="bigint", name = "count")**/
public $count;
/** @Column(type="string", name = "money")**/
public $money;
/** @Column(type="string", name = "name")**/
public $name;
}
Pesron.php
class Person{
/** @id @Column(type="integer", name="Id")**/
public $id;
/** @Column(type="string", name="name", unique=true)**/
public $name;
/** @Column(type="integer", name="age")**/
public $age;
}
规则是:人们可以拥有许多物品。 如上所述,我甚至在mysql中也没有在PHP的模型中使用外键。 减少数据的原因来自MySql。 但现在我用这样的JOIN来反击SQL。
SELECT i.*,p.name as Owner FROM Item i JOINT Person p on i.owner_id = p.Id
我在Join query和a question on stackoverflow时看一看 我来到这个DQL:
$qb = $this->em->createQueryBuilder();
$qb->select('i')
->from('item','i')->join('a.person', 'p');
我知道这个DQL是错误的。因为character
表上没有item
属性。
请给我一个关于DQL的提示。
如果不能,那么我想我会使用纯SQL,我不想这样做。
请再说一遍。
提前谢谢。
答案 0 :(得分:1)
您写道:
$qb->select('i')
->from('item','i')->join('a.character', 'u');
为什么使用“a
”和“u
”?你至少明白你在写什么吗?
你不能这样的随机字母。
仅使用别名'i',因为您已在i
中将item
定义为from
的别名。
->leftJoin('character', 'cha', 'i.owner_id = cha.id')
在此示例中,我为cha
定义了别名“character
”,然后您可以使用“cha
”进行联接