CakePHP 3.x - 关联错误 - 无法将表链接在一起

Posted

技术标签:

【中文标题】CakePHP 3.x - 关联错误 - 无法将表链接在一起【英文标题】:CakePHP 3.x - Associations Error- unable Linking Tables Together 【发布时间】:2017-08-05 02:57:11 【问题描述】:

我正在尝试关联 2 个表:JobesTypes。类型的表结构非常简单,只包含idname(1.full-time 2.partial 3.freelance)

Jobs 表,除了所有其他字段外,还包含名为:type_id 的类型的外键,因此 Jobs belongsTo 类型。 我遵循 Cake 约定,但仍然是同样的错误:

作业与类型无关...

我创建了 JobsTable 类

use Cake\ORM\Table;
class JobsTable extends Table

    public $name= 'Jobs';

    public function initialize(array $config)
        $this->belongsTo('Types');                            
    

在控制器中声明:

 <?php

    namespace App\Controller;

    use App\Controller\AppController;

    class JobsController extends AppController



        public $name='Jobs';

        public function index()
            //Get job info
        $jobs =$this->Jobs->find('all')->contain(['Types']);
        $this->set('jobs',$jobs);

        
    

然后过去查看(index.ctp):

<?php foreach ($jobs as $job) : ?>

    <p> <?php echo $job->title; ?> <?php echo $job->types->name; ?></p>

 <?php endforeach; ?>

我的错误在哪里?

【问题讨论】:

$this-&gt;Jobs 可能不是你想的那样,而只是一个默认的 Table 对象。在您的索引函数中,检查 get_class($this-&gt;Jobs) 以确保它是您期望的类。 【参考方案1】:

你也需要设置foreignKey

JobsTable.php

$this->belongsTo('Types', [
        'foreignKey' => 'type_id'
    ]);

TypesTable.php

$this->hasMany('Jobs', [
        'foreignKey' => 'type_id'
    ]);

要从 CLI 生成正确的关系,请转到命令 promot 中的 'project_directory/bin' 并点击以下烘焙命令:

cake bake types model // for types table

cake bake jobs model // for jobs table

在此处查看详细信息:CakePhp3 Code Generation With Bake

【讨论】:

我实际上已经在几个版本中尝试过,但没有成功,由于您的建议再次尝试。我无法弄清楚出了什么问题。还是一样的错误。 尝试使用 bake 命令生成正确的关系,如更新的答案所示。

以上是关于CakePHP 3.x - 关联错误 - 无法将表链接在一起的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 3.x - 保存这些表的关联数据和表单输入

CakePHP 3 保存 BelongsToMany 关联未知类型“”错误

CakePHP 3.x 从实体获取相关数据

CakePHP:无法识别 hasMany 关联

CakePHP 模型关联 HasMany - 保存错误

CakePHP中具有直接多态关联的MySQL错误