CakePHP与不同的表有一个关系

时间:2015-02-06 12:23:58

标签: php cakephp relationship

每个Artikel只有一个Barcode。由于多种原因,我想拆分Artikel模型和Barcode模型。当我从artikel表中find()时,它返回一个包含正确条形码部分的数组。但是当我试图找到条形码时,数组的artikel部分被取消了。

这就是我的意思:

// $this->Artikel->findById(102);
array(
    'Artikel' => array(
        'id' => '102',
        'name' => 'Spätburgunder Spätlese Barrique',
        'erzeuger_id' => '679',
        'volumen_id' => '44',
        'artikelgruppe_id' => '17'
    ),
    'Barcode' => array(
        'id' => '1',
        'artikel_id' => '102',
        'barcode' => '123456'
    )
)

// $this->Barcode->findByBarcode(123456);
array(
    'Barcode' => array(
        'id' => '1',
        'artikelnummer' => 'DE51076',
        'barcode' => '123456'
    ),
    'Artikel' => array(
        'artikelnummer' => null, // this is null
        'name' => null, // this is null as well
        'erzeuger_id' => null, // also null
        'volumen_id' => null, // ……
        'artikelgruppe_id' => null // null
    )
)

任何想法我做错了什么?

这些是模型

// Barcode.php
public $hasOne = array(
    'Artikel' => array(
        'className' => 'Artikel',
        'foreignKey' => 'artikel_id'
    )
);


// Artikel.php
public $hasOne = array(
    'Barcode' => array(
        'className' => 'Barcode',
        'foreignKey' => 'artikel_id'
    )
);

2 个答案:

答案 0 :(得分:3)

文章表 - id,name,artikelgruppe_id和条形码表 - id,artikel_id,条形码

关联这些模型的正确方法是:文章hasOne条形码和条形码属于文章

// Artikel.php
public $hasOne = array(
    'Barcode' => array(
        'className' => 'Barcode',
        'foreignKey' => 'artikel_id'
    )
);

// Barcode.php
public $belongsTo = array(
    'Artikel' => array(
        'className' => 'Artikel',
        'foreignKey' => 'artikel_id'
    )
);

此处article_id位于条形码表中,因此Article hasOne Barcode按预期工作。如果你的文章表中有barcode_id,条形码有一篇文章会有效。

但是,由于您需要条形码表中article_id字段中的文章,因此您应该使用belongsTo关系。

答案 1 :(得分:-1)

你从哪个控制器那里打电话?如果您使用的是同一型号则会出错,因为您必须通过模型之间的引用进行调用。例如,我认为您属于Artikel模型,因此您的第一个电话是正确的,但第二个应该是$this->Artikel->Barcode->findById(1)