如何在cakephp3中建立关系

How to make relationships in cakephp3

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

我阅读了cakephp3中的文档,以及Whosebug中的大量post,仍然没有得到任何结果。

         --------------------------
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);
}

我只是想打印账单,但我总是得到 null

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

还建议使用与 table 别名匹配的关联名称,即 Invoices(大写 I)代表 InvoicesTable,这样就可以了将自动找到 class,您不必通过 className 选项指定它(belongsTo 关联也没有 targetForeignKey 选项)。

$this->belongsTo('Invoices', [
    'foreignKey' => 'idBill'
]);
$share = $this->Shares->get($id, [
  'contain' => ['Invoices']
]);

debug($share->invoice);

另见