我终于想进入数据模型。但有一件事我无法解决,我希望这听起来不会太愚蠢:
如何或何时设置对象的ID? 我的意思是,在创建对象时,无法知道此对象在插入数据库时将具有哪些ID(通过映射器类)。那么如果我不知道ID,我怎么能坚持关系对象?
我将尝试通过一个例子解释这个:
class product {
private $id; // ??
private $name;
private $color;
function __construct( $name, color $color ){
$this->name = $name;
$this->color = $color;
}
function getName(){
return $this->name;
}
function getColor(){
return $this->color;
}
function setId(){
$this->id = $id;
}
}
class color {
private $id; // ??
private $hexCode;
function __construct( $hexCode ){
$this->hexCode = $hexCode;
}
function getId(){
return $this->id;
}
}
class productMapper{
function persist( product $product ){
// persist query
$someQueryBuilder->insert('products')->set('name',$product->getName())->set('refColor',$product->getColor()->getId());
$product->setId( $someQueryBuilder->getInsertId() );
}
}
$color = new color('FFCC00');
$product = new product( 'table', $color );
$productMapper = new productMapper();
$productMapper->persist( $product );
所以我的问题是,我无法保留我的product
对象,因为我的color
对象还没有ID。
这样做的正确方法是什么?
或者我的方法在这里完全错了?
感谢您帮助我,或者只是指出我正确的方向。
答案 0 :(得分:0)
在id列的product表中添加auto_increment主键。
答案 1 :(得分:0)
按照您的计划,您不需要产品或颜色的ID。
但是,如果您坚持为这些类提供Id(例如,如果您在数据库表中也有这些对象),则必须在这些类中规划一些代码以设置对象的Id。
def userlang(self):
return (self.user.userprofile.language)
class 123(models.Model
language = models.CharField(verbose_name=_(u"Language"),
max_length=4, choices=settings.LANGUAGES,default=userlang)