CakePHP 3.x - 关联错误 - 无法将表链接在一起
Posted
技术标签:
【中文标题】CakePHP 3.x - 关联错误 - 无法将表链接在一起【英文标题】:CakePHP 3.x - Associations Error- unable Linking Tables Together 【发布时间】:2017-08-05 02:57:11 【问题描述】:我正在尝试关联 2 个表:Jobes
和 Types
。类型的表结构非常简单,只包含id
和name
(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->Jobs
可能不是你想的那样,而只是一个默认的 Table 对象。在您的索引函数中,检查 get_class($this->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 - 关联错误 - 无法将表链接在一起的主要内容,如果未能解决你的问题,请参考以下文章