如何在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);
另见
我正在尝试建立表之间的关系,但无法弄清楚我做错了什么。
我阅读了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);
另见