我正在使用自己的框架编写我的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获得。但是现在我以这样的加入来反驳SQL。
SELECT i.*,p.name as Owner FROM Item i JOINT Person p on i.owner_id = p.Id
我看一下加入查询以及stackoverflow上的问题我来到这个DQL:
$qb = $this->em->createQueryBuilder();
$qb->select('i')
->from('item','i')->join('a.person', 'p');
我知道这个DQL是错误的。因为我在item
表上没有character
属性。 请给我一个关于DQL的提示。 如果不能,那么我认为我会使用纯SQL,我不想这样做。 请再次。 预先感谢。
您写的:
$qb->select('i')
->from('item','i')->join('a.character', 'u');
为什么要使用'a
'和'u
'?您至少了解您在写什么吗?您不能参考这样的随机字母。
别名'i'仅使用,因为您将i
定义为from
中item
的别名。
->leftJoin('character', 'cha', 'i.owner_id = cha.id')
在此典范中,我为character
定义了一个别名'cha
',然后您可以使用' cha
'来使JOIN