模型可以在CakePHP中有多个表吗?

时间:2009-04-03 12:37:14

标签: php cakephp

模型可以在CakePHP中有多个表吗?

5 个答案:

答案 0 :(得分:5)

从手册中的这句话猜测:

  

模型通常是数据库的访问点,更具体地说,是数据库中的某个表。默认情况下,每个模型使用自己名称为多个的表,即“用户”模型使用“用户”表。

我不这么认为,但你可以建立你可能需要的关系。

Check this

答案 1 :(得分:4)

当然可以,当你有很多相同的桌子时很方便。

class SomeModel extends Model
{
    var $useTable = false;

    public function ReadData()
    {
        // select table
        if($a == 1)
            $this->setSource('tableName1');
        else if($a == 2)
            $this->setSource('tableName2');
        // ...
        else if($a == N)
            $this->setSource('tableNameN');

        // now perform operations with selected table
        return $this->find('all');
    }
}

答案 2 :(得分:2)

从技术上讲,根据你提问的方式,而不是我所知道的。但是,通常情况下,我会将关系用于可能类似于您所追求的内容。例如,一个人可以很容易地在人员表中删除地址信息,但我通常更愿意将其拉出来,因为其他实体也可以拥有地址(业务等)。

同样的想法,如果你想在你的数据库中实现某种伪继承模型。例如,志愿者是人,但承包商,供应商和员工也是如此。 all共享您可能希望存储在人员表中的某些属性以及其他人类所特有的属性。

在每种情况下,您都有两个模型,但它们通过关联无缝协作。

如果那是您正在考虑的那种情况,那么类似的方法可能对您有用,尽管它不是关于具有多个表的模型。

答案 3 :(得分:1)

它不能同时拥有多个表...,但您可以修改Model :: useTable属性以将模型表切换到另一个表。给它一个旋转,让我们知道它是否有效。

答案 4 :(得分:1)

我想你想在数据库中实现某种继承(当从子表中检索信息时需要连接存储在父表中的数据)。 我解决这个问题的方法是在子模型中使用afterFind回调。我重新定义了回调如下:

function afterFind($results) {
    foreach ($results as $key => $val) {
                $fieldRetrieved=$this->query("SELECT *field* FROM *parent_table* WHERE id={$val['*ChildModelName*']['id']}");
                $results[$key]['*ChildModelName*']['*field*']=$fieldRetrieved[0]['*parent_table*']['*field*'];
    }
    return $results;
}

通过这种方式,我将父表中的字段/ s包含在从子表中获得的结果中。在这种情况下,我假设两个表都是一个名为id的字段的索引,而子表中的字段也是父表的外键(从而创建了伪继承)。