带链接表的基本 MVC
Basic MVC with linked tables
我是 cakephp 新手。
我正在开发一个应用程序,作者可以在其中创建新文章并将现有文章翻译成他们的语言。
我有三个 table:文章、article_translations 和作者。
当作者创建新文章时,将在文章中创建一条记录 article_translations。
当作者翻译现有文章时,仅在 article_translations 中创建一条记录。
articles
------
id
authors_id
preview_image
detail_image
...
article_translations
------
id
article_id
authors_id
language
title
subtitle
...
authors
------
id
user_name
email
...
我烘焙了模型、控制器和模板,它们运行良好。
文章型号:
class RecipesTable extends Table
{
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('articles');
$this->setDisplayField('id');
$this->setPrimaryKey('id');
$this->belongsTo('Users', [
'foreignKey' => 'authors_id'
]);
$this->hasMany('ArticleTranslations', [
'foreignKey' => 'article_id'
]);
}
// Some validation methods
}
article_translations 型号
class ArticleTranslationsTable extends Table
{
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('article_translations');
$this->setDisplayField('id');
$this->setPrimaryKey('id');
$this->belongsTo('Articles', [
'foreignKey' => 'author_id',
'joinType' => 'INNER'
]);
}
// Some validation methods
}
作者模型
class UsersTable extends Table
{
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('authors');
$this->setDisplayField('user_name');
$this->setPrimaryKey('id');
}
// Some validation methods
}
文章控制器
class ArticlesController extends AppController
{
public function index()
{
$this->paginate = [
'contain' => ['Authors']
];
$articles = $this->paginate($this->Articles);
$this->set(compact('articles'));
$this->set('_serialize', ['articles']);
}
// More methods
}
文章翻译控制器
class ArticleTranslationsController extends AppController
{
public function index()
{
$this->paginate = [
'contain' => ['Articles']
];
$articleTranslations = $this->paginate($this->ArticleTranslations);
$this->set(compact('articleTranslations'));
$this->set('_serialize', ['articleTranslations']);
}
// More methods
}
作者控制器
class AuthorsController extends AppController
{
public function index()
{
$authors = $this->paginate($this->Authors);
$this->set(compact('authors'));
$this->set('_serialize', ['authors']);
}
// More methods
}
文章模板(=index 函数)呈现以下内容 table:
id 作者 preview_image
------------------------------
1个
2个
............
我要的是所有文章的所有文章翻译列表,像这样:
<preview_image of article one>
id Author title language
---------------------------------------------
1 <user_name> <article_title> en
1 <user_name> <article_title> fr
<preview_image of article two>
id Author title language
---------------------------------------------
2 <user_name> <article_title> it
2 <user_name> <article_title> de
.
.
.
但是如何在 Articles Controller 中从 article_translations 加载数据?
在 Articles Controller 中,只需扩展包含您想要的数据即可。
'contain' => ['Authors', 'ArticleTranslations']
我是 cakephp 新手。 我正在开发一个应用程序,作者可以在其中创建新文章并将现有文章翻译成他们的语言。 我有三个 table:文章、article_translations 和作者。
当作者创建新文章时,将在文章中创建一条记录 article_translations。 当作者翻译现有文章时,仅在 article_translations 中创建一条记录。
articles
------
id
authors_id
preview_image
detail_image
...
article_translations
------
id
article_id
authors_id
language
title
subtitle
...
authors
------
id
user_name
email
...
我烘焙了模型、控制器和模板,它们运行良好。
文章型号:
class RecipesTable extends Table
{
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('articles');
$this->setDisplayField('id');
$this->setPrimaryKey('id');
$this->belongsTo('Users', [
'foreignKey' => 'authors_id'
]);
$this->hasMany('ArticleTranslations', [
'foreignKey' => 'article_id'
]);
}
// Some validation methods
}
article_translations 型号
class ArticleTranslationsTable extends Table
{
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('article_translations');
$this->setDisplayField('id');
$this->setPrimaryKey('id');
$this->belongsTo('Articles', [
'foreignKey' => 'author_id',
'joinType' => 'INNER'
]);
}
// Some validation methods
}
作者模型
class UsersTable extends Table
{
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('authors');
$this->setDisplayField('user_name');
$this->setPrimaryKey('id');
}
// Some validation methods
}
文章控制器
class ArticlesController extends AppController
{
public function index()
{
$this->paginate = [
'contain' => ['Authors']
];
$articles = $this->paginate($this->Articles);
$this->set(compact('articles'));
$this->set('_serialize', ['articles']);
}
// More methods
}
文章翻译控制器
class ArticleTranslationsController extends AppController
{
public function index()
{
$this->paginate = [
'contain' => ['Articles']
];
$articleTranslations = $this->paginate($this->ArticleTranslations);
$this->set(compact('articleTranslations'));
$this->set('_serialize', ['articleTranslations']);
}
// More methods
}
作者控制器
class AuthorsController extends AppController
{
public function index()
{
$authors = $this->paginate($this->Authors);
$this->set(compact('authors'));
$this->set('_serialize', ['authors']);
}
// More methods
}
文章模板(=index 函数)呈现以下内容 table: id 作者 preview_image ------------------------------ 1个 2个 ............
我要的是所有文章的所有文章翻译列表,像这样:
<preview_image of article one>
id Author title language
---------------------------------------------
1 <user_name> <article_title> en
1 <user_name> <article_title> fr
<preview_image of article two>
id Author title language
---------------------------------------------
2 <user_name> <article_title> it
2 <user_name> <article_title> de
.
.
.
但是如何在 Articles Controller 中从 article_translations 加载数据?
在 Articles Controller 中,只需扩展包含您想要的数据即可。
'contain' => ['Authors', 'ArticleTranslations']