主义1和多个主键,是否可能?

时间:2011-08-05 16:26:04

标签: php doctrine

我可以在Doctrine 1中使用多个主键吗?如果没有,任何解决方法?

3 个答案:

答案 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();