带有链接表的基本 MVC

Posted

技术标签:

【中文标题】带有链接表的基本 MVC【英文标题】:Basic MVC with linked tables 【发布时间】:2017-12-04 08:21:31 【问题描述】:

我是 cakephp 新手。 我正在开发一个应用程序,作者可以在其中创建新文章并将现有文章翻译成他们的语言。 我有三个表:articles、article_translations 和 authors。

当作者创建新文章时,会在 article 和 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 函数)呈现下表: 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 加载数据?

【问题讨论】:

【参考方案1】:

在 Articles Controller 中,只需扩展容器以包含您想要的数据。

'contain' => ['Authors', 'ArticleTranslations']

【讨论】:

以上是关于带有链接表的基本 MVC的主要内容,如果未能解决你的问题,请参考以下文章

带有查找表和链接表的一对多查询

在 Access 中删除带有 SQL 链接表的登录提示

使用带有 Azure 链接表的 Access 插入 SQL 失败

带有 MVC 的 JQuery 移动链接

带有两个表的 PHP 查询

无法显示带有 asp.net mvc url.action 链接的引导对话框