php - cakephp 显示来自两个具有关系的不同表的 ID 显示 table.name

标签 php sql cakephp cakephp-3.0

我应该将表“dogs”和“cats”的各自ID保存在“dogs_cats”中,当看到数据时显示狗和猫的名字。

我有这三个表:

CREATE TABLE IF NOT EXISTS cats (
  id int(11) NOT NULL,
  name varchar(40) NOT NULL,
  surname varchar(40) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS dogs (
  id int(11) NOT NULL,
  name varchar(40) NOT NULL,
  surname varchar(40) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS dogs_cats (
  id int(11) NOT NULL,
  dog_id int(11) NOT NULL,
  cat_id int(11) NOT NULL,
  info varchar(40) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE dogs
ADD PRIMARY KEY (id),
MODIFY id int(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE cats
ADD PRIMARY KEY (id),
MODIFY id int(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE dogs_cats
ADD PRIMARY KEY (id),
MODIFY id int(11) NOT NULL AUTO_INCREMENT,
ADD FOREIGN KEY(dog_id) REFERENCES dogs(id),
ADD FOREIGN KEY(cat_id) REFERENCES cats(id);

schema DB

实际例子:

table cats:
id name surname
1  tony may

table dogs:
id name surname
1  pop  gray

table dogs_cats:
id dog_id cat_id info
1  1       1       pop and tony

but visualize:
id name_dog name_cat info
1  pop       tony      pop and tony

关系

对于表“dogs”的每个ennuple,可能有一个或多个表“dogs_cats”的ennuple:“dogs”有许多“dogs_cats”和“dogs_cats”属于“dogs”

对于表“cats”的每个ennuple,可能有一个或多个表“dogs_cats”的ennuple:“cats”有许多“dogs_cats”和“dogs_cats”属于“cats”

src>模型>表格>DogsTable.php

<?php

use App\Model\Entity\Dog;
use Cake\ORM\Table;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Validation\Validator;

use Cake\ORM\Table;

class DogsTable extends Table
{
    public function initialize(array $config)
    {
        $this->addBehavior('Timestamp');


        $this->hasMany('DogsCats',[
            'foreignKey'=>'dog_id'
        ]);
    }


}
?>

src>模型>表格>CatsTable.php

<?php

use App\Model\Entity\Cat;
use Cake\ORM\Table;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Validation\Validator;

use Cake\ORM\Table;

class DogsTable extends Table
{
    public function initialize(array $config)
    {
        $this->addBehavior('Timestamp');


        $this->hasMany('DogsCats',[
            'foreignKey'=>'cat_id'
        ]);
    }


}
?>

src>模型>表格>DogsCatsTable.php

<?php

use App\Model\Entity\DogsCat;
use Cake\ORM\Table;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Validation\Validator;

use Cake\ORM\Table;

class DogsCatsTable extends Table
{
    public function initialize(array $config)
    {
        $this->addBehavior('Timestamp');


        $this->belongsTo('dogs', [
            'foreignKey' => 'id',
            'joinType'=>'INNER',
        ]);

        $this->belongsTo('cats', [
            'foreignKey' => 'id',
            'joinType'=>'INNER',
        ]);
    }


}
?>

如何从 Controller DogsCatsController.php 获取表 dogs 和 cats 的字段?

最佳答案

如果你的关联规则没问题的话 您只需在 contains(根据您的需要进行更改) 中使用以下内容即可实现此目的:

$query = $this->DogsCats
        ->find('all');
$query->contain(  ['Dogs','Cats']
                );
$results = $query->toArray();
$this->set('results', $results );

如果您只想拥有 id ,那么您可以尝试以下操作:

$query->contain(
                  [
                    'Dogs'=>['fields' => ['id']],
                   'Cats'=>['fields' => ['id']]
                  ]
                );

关于php - cakephp 显示来自两个具有关系的不同表的 ID 显示 table.name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59141547/

相关文章:

PHP 命名空间奇数文件夹以 "t","s","n"结尾

PHPExcel - 读取单元格并将其传递到 MYSQL

sql - 如何从 Oracle 中的表中获取列名?

mysql - SQL插入如果缺少值

mysql - 我想使用 FIND_IN 以特定顺序从数组中提取数据,如何?--从未收到正确答案

php - 我可以停止 CakePHP 获取查询的所有行吗?

php - mySQL 在一个查询但三个表中使用复杂连接列出配置文件和电影

php - 从数据库中获取尚未建立关系的所有对象

sql - 格式化双表中的列名称

cakephp - 在对其他值进行 OR 运算时使用 find 和 null