2017-04-01 3 views
0

私は最終的にデータモデルに入りたいと思っています。しかし、私は私の頭を包み込むことができない1つのことがあります、そして、私はこれがあまりにも馬鹿に聞こえないことを願っています:リレーショナルモデルオブジェクトの闘争

どのようにオブジェクトのIDを設定する? オブジェクトを作成するときに、(マッパークラスによって)このオブジェクトがデータベースに挿入されたときにどのIDを持つかを知る方法がありません。だから私はまだIDを知っていない場合、リレーショナルオブジェクトを永続化することはできますか?

私が例でこれを説明しようとします。私のcolorオブジェクトはまだ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オブジェクトを永続化することはできません。 これを行う正しい方法は何ですか? ここで私のアプローチは間違っていますか?

私を助けてくれたり、正しい方向に向いてくれてありがとう。

答えて

0

id_columnの商品テーブルにauto_increment主キーを追加します。

0

ここで計画したとおり、製品または色についてはIDが必要ありません。

しかし、これらのクラスのIDを持つことを主張する場合(たとえば、これらのオブジェクトもデータベーステーブルにある場合)、これらのクラスにいくつかのコードを計画してオブジェクトのIDを設定する必要があります。

class product { 

    private $id; 
    private $name; 
    private $color; 
    private static $last_id; 

    function __construct($name, color $color){ 
    $this->last_id++; 
    $this->id=$this->last_id; 
    $this->name = $name; 
    $this->color = $color; 
    } 

    function getName(){ 
    return $this->name; 
    } 

    function getColor(){ 
    return $this->color; 
    } 

    function getId(){ 
    return $this->id; 
    } 
} 

class color { 

    private $id; 
    private $hexCode; 
    private static $last_id; 

    function __construct($hexCode){ 
    $this->last_id++; 
    $this->id=$this->last_id; 
    $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);