我可以在Doctrine 1中使用多个主键吗?如果没有,任何解决方法?
答案 0 :(得分:0)
表中总有1个主键(其数据库的限制)
您可以使用Unique键(我不知道如何在学说中使用唯一键支持。访问Doctrine site上的手册)
答案 1 :(得分:0)
学说手册并没有真正提及任何相关内容,但Symfony(1.2)在他们的手册中简要covers this(symfony使用doctrine作为默认的ORM)。
$userGroup = Doctrine::getTable('UserGroup')->find(array(1, 2));
我无法想到为什么doctrine不支持复合主键,因为你可以为连接表声明模型,它实际上由复合主键组成。
答案 2 :(得分:0)
是的,你可以。但它没有很多文档。例如,如果我们希望实体User有多个Locations,而Locations有很多用户,那么你需要这样的东西:
在您的用户模型的设置方法中,您输入:
$this->hasMany('Location as Locations', array(
'refClass' => 'UserLocation', //Refering to the relation table
'local' => 'user_id', //the user id in the realtion table
'foreign' => 'location_id' //the location id in the relation table
));
在位置模型的设置方法中,你把它放在:
$this->hasMany('User as Users', array(
'refClass' => 'UserLocation',
'local' => 'location_id',
'foreign' => 'user_id'
));
在多对多关系模型(UserLocation)的设置方法中,你可以把它放在:
$this->hasMany('User', array(
'local' => 'user_id',
'foreign' => 'id'));
$this->hasMany('Location', array(
'local' => 'location_id',
'foreign' => 'id'));
现在,如果你想做一个Doctrine_Query,并从位置id:12获取所有用户,那就是:
$q = Doctrine_Query::create()
->select("u.*")
->from('User u')
->leftJoin("u.UserLocation ul")
->where('ul.location_id = ?',12);
如果您要插入用户,请记住创建UserLocation对象,如下所示:
$userLocation = new UserLocation();
$userLocation->location_id = $locationId;
$userLocation->last_login = date('Y-m-d H:i:s');
$userLocation->user_id = $user->id; //from the user you created before
$userLocation->save();