Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP对象转换为数组?_Php_Mysql_Cakephp_Cakephp 3.0 - Fatal编程技术网

CakePHP对象转换为数组?

CakePHP对象转换为数组?,php,mysql,cakephp,cakephp-3.0,Php,Mysql,Cakephp,Cakephp 3.0,我试图在我的一个表上显示名称而不是ID。 我有一个工作请求,其中每个复选框都有许多工作请求检查 这些是我的表创建语句 CREATE TABLE `work_requests` ( `id` int(5) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ); CREATE TABLE `work_request_checks` ( `work_request_id` int(11) NOT NULL, `checkbox_id` int(11

我试图在我的一个表上显示名称而不是ID。 我有一个工作请求,其中每个复选框都有许多工作请求检查

这些是我的表创建语句

CREATE TABLE `work_requests` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
);
CREATE TABLE `work_request_checks` (
  `work_request_id` int(11) NOT NULL,
  `checkbox_id` int(11) NOT NULL,
  `value` int(3) DEFAULT NULL,
  PRIMARY KEY (`work_request_id`,`checkbox_id`)
);
CREATE TABLE `checkboxes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
);
工作请求页面中,我试图显示已输入的工作请求检查的列表。除了cakephp似乎没有将WorkRequestCheck视为一个对象之外,它工作正常。它将显示复选框的ID,但当我尝试引用->名称时,会出现错误

include - APP/Template/WorkRequests/view.ctp, line 193
Cake\View\View::_evaluate() - CORE/src/View/View.php, line 1010
Cake\View\View::_render() - CORE/src/View/View.php, line 971
Cake\View\View::render() - CORE/src/View/View.php, line 595
Cake\Controller\Controller::render() - CORE/src/Controller/Controller.php, line 623
Cake\Http\ActionDispatcher::_invoke() - CORE/src/Http/ActionDispatcher.php, line 125
Cake\Http\ActionDispatcher::dispatch() - CORE/src/Http/ActionDispatcher.php, line 93
Cake\Http\BaseApplication::__invoke() - CORE/src/Http/BaseApplication.php, line 78
Cake\Http\Runner::__invoke() - CORE/src/Http/Runner.php, line 65
Cake\Routing\Middleware\RoutingMiddleware::__invoke() - CORE/src/Routing/Middleware/RoutingMiddleware.php, line 59
Cake\Http\Runner::__invoke() - CORE/src/Http/Runner.php, line 65
Cake\Routing\Middleware\AssetMiddleware::__invoke() - CORE/src/Routing/Middleware/AssetMiddleware.php, line 88
Cake\Http\Runner::__invoke() - CORE/src/Http/Runner.php, line 65
Cake\Error\Middleware\ErrorHandlerMiddleware::__invoke() - CORE/src/Error/Middleware/ErrorHandlerMiddleware.php, line 93
Cake\Http\Runner::__invoke() - CORE/src/Http/Runner.php, line 65
DebugKit\Middleware\DebugKitMiddleware::__invoke() - ROOT/vendor/cakephp/debug_kit/src/Middleware/DebugKitMiddleware.php, line 52
Cake\Http\Runner::__invoke() - CORE/src/Http/Runner.php, line 65
这很奇怪,因为我正在处理WorkRequestChecks索引页面,如下所示。

这是我在工作请求页面上引用复选框名称时收到的错误的照片。

这是我的工作请求的代码view.ctp,与工作请求检查相关

<?php foreach ($workRequest->work_request_checks as $Checks): ?>
    <tr>
        <td><?= $this->Html->link($Checks->checkbox->name, ['controller' => 'Checkboxes', 'action' => 'view', $Checks->checkbox->id])?></td>
        <td><?= h($Checks->value) ?></td>
    </tr>
<?php endforeach; ?>
    object(App\Model\Entity\WorkRequestCheck) {

    'work_request_id' => (int) 80590,
    'checkbox_id' => (int) 1,
    'value' => (int) 1,
    '[new]' => false,
    '[accessible]' => [
        '*' => true
    ],
    '[dirty]' => [],
    '[original]' => [],
    '[virtual]' => [],
    '[errors]' => [],
    '[invalid]' => [],
    '[repository]' => 'WorkRequestChecks'

}
然后我试着打印一张$支票

<?php foreach ($workRequest->work_request_checks as $Checks): ?>
    <tr>
        <td><?= $this->Html->link($Checks->checkbox->name, ['controller' => 'Checkboxes', 'action' => 'view', $Checks->checkbox->id])?></td>
        <td><?= h($Checks->value) ?></td>
    </tr>
<?php endforeach; ?>
    object(App\Model\Entity\WorkRequestCheck) {

    'work_request_id' => (int) 80590,
    'checkbox_id' => (int) 1,
    'value' => (int) 1,
    '[new]' => false,
    '[accessible]' => [
        '*' => true
    ],
    '[dirty]' => [],
    '[original]' => [],
    '[virtual]' => [],
    '[errors]' => [],
    '[invalid]' => [],
    '[repository]' => 'WorkRequestChecks'

}
这是我的工作请求控制器视图方法

public function view($id = null)
    {   
        $workRequest = $this->WorkRequests->get($id, [
            'contain' => ['WorkRequestChecks']
        ]);

        $this->set('workRequest', $workRequest);
        $this->set('_serialize', ['workRequest']);
这是我的WorkRequestsTable.php文件的一部分

public function initialize(array $config)
    {
        parent::initialize($config);
        $this->setTable('work_requests');
        $this->setDisplayField('id');
        $this->setPrimaryKey('id');
        $this->hasMany('WorkRequestChecks', [
            'foreignKey' => 'work_request_id'
        ]);
    }
 public function initialize(array $config)
    {
        parent::initialize($config);
        $this->setTable('checkboxes');
        $this->setDisplayField('name');
        $this->setPrimaryKey('id');
        $this->belongsTo('CheckboxTypes', [
            'foreignKey' => 'checkbox_type_id',
            'joinType' => 'INNER'
        ]);
    }
这是我的CheckboxesTable.php文件的一部分

public function initialize(array $config)
    {
        parent::initialize($config);
        $this->setTable('work_requests');
        $this->setDisplayField('id');
        $this->setPrimaryKey('id');
        $this->hasMany('WorkRequestChecks', [
            'foreignKey' => 'work_request_id'
        ]);
    }
 public function initialize(array $config)
    {
        parent::initialize($config);
        $this->setTable('checkboxes');
        $this->setDisplayField('name');
        $this->setPrimaryKey('id');
        $this->belongsTo('CheckboxTypes', [
            'foreignKey' => 'checkbox_type_id',
            'joinType' => 'INNER'
        ]);
    }
这是我的WorkRequestChecksTable.php文件的一部分 公共函数初始化(数组$config) { 父::初始化($config)


我不确定这为什么不起作用;它似乎已将对象$Check转换为数组。

与在CTP中一样,您正在尝试访问$Checks->checkbox->name

但正如您的转储所说,它只包含:

对象(应用程序\模型\实体\工作请求检查){

}

因此,根本没有复选框字段,然后将始终为null,您将得到错误。
如果要从id为的复选框中检索数据,则需要在模型中将其关联。此外,还需要检查递归,您可能希望将其更改为1或2。

请使用
debug()
转储对象,并确保输出格式正确,
$workRequest
转储完全不可读。@ndm感谢您不知道我可以使用debug()就像这样。:-
$Checks
仍然是一个对象,但它没有
复选框
字段,因此
->复选框
将返回
null
。您没有包含
复选框
关联。唯一的问题是工作请求与复选框不关联,只有工作请求检查。cakephp I c中有方法吗你可以显示复选框中的名称,而不创建与工作请求的关联吗?你可以在复选框中使用查找,但我不建议这样做,即使我已经这样做了。通过这种方式,你可以将id解析为值,将名称解析为标签,但很容易将其关联起来。好的,在我的复选框c中使用一个函数就可以了OnController找到所有复选框对象,并在我的工作请求视图ctp中调用它。看起来有点凌乱,但它可以工作,谢谢!