具有匹配 table/model 名称的 CakePHP 3 外键
CakePHP 3 foreign key with matching table/model name
CakePHP 3:
我正在尝试更新我的 table 中名为 poi 的外键。国外的table被命名为poi_types。不幸的是,DB-Designer 将外键命名为 poi_type 而不是 poi_type_id。
蛋糕回复
Passed variable is not an array or object, using empty array instead
我无法更改关系,因为工作中的应用程序也会向这个特定的 tables 发送请求。
知道如何告诉 CakePHP 接受通过 POST 传递的值作为普通值吗?
编辑
视图包含以下字段:
<?= $this->Form->input('poi_type', ['options' => $poi_types_select]); ?>
于
$poi = $this->Pois->patchEntity($poi, $this->request->data);
它因上述错误而失败。删除输入字段时,一切正常。
我将外国 ID 更改为 poi_type_id,一切正常。
是否有任何解决方法可以说服 Cake 更新此字段?
错误跟踪:
--------InvalidArgumentException------
⟩ ArrayObject->__construct
CORE/src/ORM/Marshaller.php, line 200
⟩ Cake\ORM\Marshaller->_prepareDataAndOptions
CORE/src/ORM/Marshaller.php, line 103
⟩ Cake\ORM\Marshaller->one
CORE/src/ORM/Marshaller.php, line 221
⟩ Cake\ORM\Marshaller->_marshalAssociation
CORE/src/ORM/Marshaller.php, line 558
⟩ Cake\ORM\Marshaller->_mergeAssociation
CORE/src/ORM/Marshaller.php, line 412
⟩ Cake\ORM\Marshaller->merge
CORE/src/ORM/Table.php, line 1978
⟩ Cake\ORM\Table->patchEntity
APP/Controller/PoisController.php, line 111
⟩ App\Controller\PoisController->add
[internal function]
⟩ call_user_func_array
CORE/src/Controller/Controller.php, line 410
⟩ Cake\Controller\Controller->invokeAction
CORE/src/Routing/Dispatcher.php, line 114
⟩ Cake\Routing\Dispatcher->_invoke
CORE/src/Routing/Dispatcher.php, line 87
⟩ Cake\Routing\Dispatcher->dispatch
ROOT/webroot/index.php, line 37
PoiTypes 上的 TableDefinitions
class PoiTypesTable extends Table
{
/**
* Initialize method
*
* @param array $config The configuration for the Table.
* @return void
*/
public function initialize(array $config)
{
$this->table('poi_types');
$this->hasMany('poi_type_translations');
$this->belongsTo('poi',['foreignKey' => 'poi_type']);
}
Poi 上的表定义
class PoisTable extends Table
{
/**
* Initialize method
*
* @param array $config The configuration for the Table.
* @return void
*/
public function initialize(array $config)
{
$this->belongsTo('datasets');
$this->hasMany('poi_translations',['foreignKey' => 'poi_id']);
$this->hasOne('poi_types',['foreignKey' => 'id']);
}
我认为发生错误是因为您的关联是这样设置的,Poi BelongsTo PoiType,我猜这会导致 Cake 在名称为 "poi_type" 的实体中构建关联的 属性 名称.
$poiEntity->poi_type // poi_type is expected to be an array or entity object
您需要更改实体中关联 table 的名称。 See this page of the manual. 您需要更改 属性 名称。
$this->belongsTo('PoiTypes', [
'className' => 'PoiTypes',
'foreignKey' => 'poi_type',
'propertyName' => 'poi_types'
]);
CakePHP 3: 我正在尝试更新我的 table 中名为 poi 的外键。国外的table被命名为poi_types。不幸的是,DB-Designer 将外键命名为 poi_type 而不是 poi_type_id。 蛋糕回复
Passed variable is not an array or object, using empty array instead
我无法更改关系,因为工作中的应用程序也会向这个特定的 tables 发送请求。
知道如何告诉 CakePHP 接受通过 POST 传递的值作为普通值吗?
编辑
视图包含以下字段:
<?= $this->Form->input('poi_type', ['options' => $poi_types_select]); ?>
于
$poi = $this->Pois->patchEntity($poi, $this->request->data);
它因上述错误而失败。删除输入字段时,一切正常。
我将外国 ID 更改为 poi_type_id,一切正常。
是否有任何解决方法可以说服 Cake 更新此字段?
错误跟踪:
--------InvalidArgumentException------
⟩ ArrayObject->__construct
CORE/src/ORM/Marshaller.php, line 200
⟩ Cake\ORM\Marshaller->_prepareDataAndOptions
CORE/src/ORM/Marshaller.php, line 103
⟩ Cake\ORM\Marshaller->one
CORE/src/ORM/Marshaller.php, line 221
⟩ Cake\ORM\Marshaller->_marshalAssociation
CORE/src/ORM/Marshaller.php, line 558
⟩ Cake\ORM\Marshaller->_mergeAssociation
CORE/src/ORM/Marshaller.php, line 412
⟩ Cake\ORM\Marshaller->merge
CORE/src/ORM/Table.php, line 1978
⟩ Cake\ORM\Table->patchEntity
APP/Controller/PoisController.php, line 111
⟩ App\Controller\PoisController->add
[internal function]
⟩ call_user_func_array
CORE/src/Controller/Controller.php, line 410
⟩ Cake\Controller\Controller->invokeAction
CORE/src/Routing/Dispatcher.php, line 114
⟩ Cake\Routing\Dispatcher->_invoke
CORE/src/Routing/Dispatcher.php, line 87
⟩ Cake\Routing\Dispatcher->dispatch
ROOT/webroot/index.php, line 37
PoiTypes 上的 TableDefinitions
class PoiTypesTable extends Table
{
/**
* Initialize method
*
* @param array $config The configuration for the Table.
* @return void
*/
public function initialize(array $config)
{
$this->table('poi_types');
$this->hasMany('poi_type_translations');
$this->belongsTo('poi',['foreignKey' => 'poi_type']);
}
Poi 上的表定义
class PoisTable extends Table
{
/**
* Initialize method
*
* @param array $config The configuration for the Table.
* @return void
*/
public function initialize(array $config)
{
$this->belongsTo('datasets');
$this->hasMany('poi_translations',['foreignKey' => 'poi_id']);
$this->hasOne('poi_types',['foreignKey' => 'id']);
}
我认为发生错误是因为您的关联是这样设置的,Poi BelongsTo PoiType,我猜这会导致 Cake 在名称为 "poi_type" 的实体中构建关联的 属性 名称.
$poiEntity->poi_type // poi_type is expected to be an array or entity object
您需要更改实体中关联 table 的名称。 See this page of the manual. 您需要更改 属性 名称。
$this->belongsTo('PoiTypes', [
'className' => 'PoiTypes',
'foreignKey' => 'poi_type',
'propertyName' => 'poi_types'
]);