如何在3个表连接的情况下在cakephp3中打印字段的确切值

杰文·帕勒

以下是我的3个表格,分别由用户,网站和项目组成,请参见下面的图片以获取所需的输出

241是当前登录用户的ID。

用户表字段

id
email
username
password

网站表字段

id
domain
company

项目表字段

id
int user_id   // select option to get from user 
varchar domain    // select option to get from websites table
varchar designer  // select option to get from user 
varchar developer // select option to get from user 
int price

UsersTable.php

public function initialize(array $config)
{
    parent::initialize($config);
    $this->table('users');
    $this->belongsTo('Users');
    $this->hasMany('Subjects');
    $this->hasMany('Websites');
    $this->hasMany('Projects');
    $this->displayField('username');  // called in project add.ctp
    $this->primaryKey('id'); 
}

UsersController.php

public function project($id = null)
{
    $users = $this->Users->get($id, [
        'contain' => [
            'Projects'
        ]
    ]);
    $this->set('users', $users);
    $this->set('_serialize', ['users']);

}

当我单击按钮时,我的项目

我的专案

<table>
<tr>
    <td>Designer</td>
    <td>Price</td>
    <td>Developer</td>
    <td>Domain</td>
</tr>
<?php 
    if(!empty($users->projects)) {
        foreach($users->projects as $project) {
?>
    <tr>                              
    <td> <?php echo $project->designer;?> </td>
    <td> <?php echo $project->price;?> </td>
    <td> <?php echo $project->developer;?> </td>
    <td> <?php echo $project->domain;?> </td>
    </tr>
<?php
        }
    }
    else{
        echo"You dont have any projects yet";
    }
?>
</table>

241是当前登录用户的ID,如果管理员将分配其他开发者和其他设计者,则开发者和设计者可以不同

  1. 它将打印数据,但不打印值和ID
  2. 我不知道如何印刷公司

输出pr($users)

App\Model\Entity\User Object
(
    [username] => pcsodaily
    [password] => $2y$10$u3W..vnZ3ygXH3BhFJ2U0ui7qI2bwRJcM85tVR.SPUlNXsTdM/GNa
    [id] => 241
    [email] => [email protected]
    [profile_pic] => Resource id #256
    [destination] => E:\xampp-for-cakephp3\htdocs\sibonga\webroot\img\users\pcsodaily\20643696_1656261664406406_1426837475_n.jpg
    [created] => 2018-04-06
    [age] => 30
    [address] => Bato, Sibonga Cebu
    [gender] => Male
    [firstname] => pcso
    [lastname] => calderon
    [activation_key] => f6aff532-2632-4440-a144-6006ae1aa374
    [status] => 1
    [pass_key] => 
    [timeout] => 
    [websites] => Array
        (
        )

    [projects] => Array
        (
            [0] => App\Model\Entity\Project Object
                (
                    [id] => 9
                    [finished_time] => 2018-04-30
                    [designer] => 241
                    [developer] => 241
                    [price] => 200
                    [status] => live
                    [user_id] => 241
                    [domain] => 9
                    [[new]] => 
                    [[accessible]] => Array
                        (
                            [*] => 1
                            [id] => 
                        )

                    [[dirty]] => Array
                        (
                        )

                    [[original]] => Array
                        (
                        )

                    [[virtual]] => Array
                        (
                        )

                    [[errors]] => Array
                        (
                        )

                    [[invalid]] => Array
                        (
                        )

                    [[repository]] => Projects
                )

        )

    [[new]] => 
    [[accessible]] => Array
        (
            [*] => 1
            [id] => 
        )

    [[dirty]] => Array
        (
        )

    [[original]] => Array
        (
        )

    [[virtual]] => Array
        (
        )

    [[errors]] => Array
        (
        )

    [[invalid]] => Array
        (
        )

    [[repository]] => Users
)
格雷格·施密特(Greg Schmidt)

表中的designerdeveloper字段projects似乎是作为ID来引用users表中的记录的这些绝对应该是整数,而不是varchars,如果您还不很了解这个项目,我建议您也将它们更改为designer_idand developer_id如果可以做到这一点,那么您ProjectsTable应该具有一个初始化函数,如下所示:

public function initialize(array $config)
{
    parent::initialize($config);
    $this->table('projects');
    $this->belongsTo('Designers', [
        'foreign_key' => 'designer_id',
        'className' => 'Users',
    ]);
    $this->belongsTo('Developers', [
        'foreign_key' => 'developer_id',
        'className' => 'Users',
    ]);
    $this->primaryKey('id'); 
}

完成此操作后,您的project功能将变得更像这样:

$users = $this->Users->get($id, [
    'contain' => [
        'Projects' => [
            'Designers',
            'Developers',
        ]
    ]
]);

然后您的模板可以使用

<?php echo $project->designer->username; ?>
<?php echo $project->developer->username; ?>

如果由于某种原因您不能更改要添加_id到末尾的字段名称,则需要propertyNamebelongsTo调用中添加该选项,以更改可以访问相关实体的属性的名称。例如,,'propertyName' => 'designer_record'然后您的模板需要说

<?php echo $project->designer_record->username; ?>

代替。

您还可以添加

$this->hasMany('DesignedProjects', [
    'foreign_key' => 'designer_id',
    'className' => 'Projects',
]);

到你的UsersTable::initialize功能,并为DevelopedProjects类似的东西,如果它曾经打算你得到的项目用户设计或开发列表是有用的。这样,您就可以DesignedProjects在阅读用户时根据需要将其包含在自己的容器中,并使用进行引用$user->designed_projects

旁注:

一定要确保用户不属于用户,这与您的初始化函数相反。

$user当您获得单个实体时,使用标准名称作为变量名称要比更为标准$users

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在没有`SELECT`的情况下在oracle上打印字段类型

R:如何在不评估 `...` 的情况下返回 `fn(...)` 中 `...` 的确切形式?

如何在不知道确切类型的情况下在 Rust 中组合特征操作

如何在C中打印程序计数器的确切值

如何在cakephp中连接3个表?(关系)

如何在不知道确切键的情况下在 Java 中的 JSON 字符串中屏蔽特定值

如何在不重写的情况下在toString中打印类的var字段?

如何在不返回的情况下在 tf.while_loop 中打印张量的值?

JavaScript如何在不给出与对象值匹配的确切搜索值的情况下查找对象数组的数据

我如何在不使用while循环的情况下在python3中重复一个函数?

如何在不使用存储过程的情况下在表函数中返回值 exec?

如何在没有分区键的情况下在 DynamoDb 表中查找值?

Cakephp3,如何在cakephp3中使用where子句和内部联接?

如何在没有Numpy函数的情况下在python中显示3 * 3矩阵

如何在python中的确切术语后打印单词

如何在没有重复值的情况下在python中获得前100个素数?

如何在cakephp3中的子控制器中传递父ID的值

如何在CakePHP 2中为3个树状结构的连接表保存数据

如何在没有用于构建仪表板的模型的情况下在 cakephp 3 中创建页面/视图?

如何确定golang中连接的确切字节长度?

CakePHP 3 - 默认情况下在查询中排除字段,除非特别选择

如何在不知道程序的确切路径的情况下从 python 脚本级别运行任何程序?

如何在cakephp3中建立关系

如何在cakePHP3中删除特定用户的会话?

如何在不带引号的情况下打印字典的字符串值?

如何扩展表类 CakePhp3

如何在没有AlamoFire的情况下在Swift 3中同时发出异步HTTP请求

如何在不使用运动训练的情况下在watchOS 3+中获取心率

如何在不使用扩展的情况下在 Cake3 中创建 RESTful 路由?