如何在cakephp3中建立关系

时间:2019-06-11 18:48:12

标签: cakephp orm relationship cakephp-3.x

我正在尝试建立表之间的关系,但无法弄清楚我做错了什么。

我阅读了cakephp3中的文档以及stackoverflow中的大量帖子,但仍然无法获得任何结果。

         --------------------------
name    |invoices     |shares      |
var     |id           |id          |
var     |             |idBill      |
         --------------------------

该关系应该来自idBill(份额)和ID(发票)

class SharesTable extends Table {
    public function initialize(array $config) {
        parent::initialize($config);

        $this->belongsTo('invoices', [
        'className' => 'App\Model\Table\InvoicesTable',
        'foreignKey' => 'idBill',
        'targetForeignKey' => 'id'
        ]);
    }
}

然后在控制器中尝试将帐单关联方打印到共享中,如下所示:

public function view($id = null)
{
    $share = $this->Shares->get($id, [
      'contain' => []
    ]);
    var_dump( $share->invoices );

    $this->set('share', $share);
}

我只是希望打印出帐单,但我总是得到空值

1 个答案:

答案 0 :(得分:1)

您的contain为空,因此您不会收到任何关联。此外,belongsTo(和hasOne)关联的默认实体属性名称是关联名称的单数,加下划线的变体,即invoice,而不是invoices

还建议使用与表别名匹配的关联名称,即Invoices的{​​{1}}(大写I),这样它将自动找到该类并您不必通过InvoicesTable选项进行指定(对于className关联也没有targetForeignKey选项)。

belongsTo
$this->belongsTo('Invoices', [
    'foreignKey' => 'idBill'
]);

另请参见