Cakephp join:从两个表中检索数据

时间:2013-07-24 11:23:25

标签: php sql cakephp cakephp-2.0 cakephp-2.1

我正在使用Cakephp 2.x ..我的数据库名称中有两个表图像音频 ..两者都有用户ID 字段...首先我想要的是我想要检索数据并按两个表中的日期字段排序..在我的视图页面上我想通过以下方式显示图像和视频约会......

例如image1,video2,video3,image2

现在我在图像模型

中这样做
   function getImagesAndAudio($userid){
       $this->bindModel(array(
        'belongsTo' => array(
            'Audio' => array(
                'className' => 'Audio',
                'foreignKey' => false,
                'conditions' => array(

                    'Image.user_id = Audio.user_id',




                ),
                'type' => 'LEFT',

                'order'=>'Image.date',//error


            )
        )
    ), false);

    return $this->find('all', array('conditions' => array('Image.User_id' => $userid),
        'contain' => array('Audio' ),
        ));

现在的问题是,如果我这样做,它会给我错误

      'order'=>'date',

另一件事我不知道如何以混合顺序显示图像和视频...我的意思是当我这样做时

   foreach ($datas as $data){
     echo $data['Image']['filename'];
     echo $data['Audio']['filename'];

      }

问题是我必须手动编写现在显示图像的代码,现在显示音频...我想显示关于日期的文件..所以如果有两个音频文件显示后的图像图像,然后等等

2 个答案:

答案 0 :(得分:0)

如果我理解你的正确,我认为这种方法应该有效:

定义图像/音频与用户之间的正确关系(用户拥有多个音频/图像和音频/图像属于用户)

您可以定义相关图像/音频文件的排序方式(参见CakePHP文档:http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasmany

现在,在您的控制器中,只需为您的视图设置用户,您就可以使用

检索数据
<?php
//Same goes for Image
foreach($userVariable[‘Audio‘] as $audio) {
    echo $audio['filename‘]
}
?>

答案 1 :(得分:0)

我有同样的情况。 {虽然收效甚微,但我尝试使用CakePHP的Hash类来合并两个模型的数组,以便将模型组合成一个记录集。也许另一个人可以使用CakePHP来解释如何做到这一点。}

对我有用的是通过视图整合MySQL数据库中的两个模型(表)。继续使用现有模型进行图像和音频CrUD操作。对于此页面,请使用基于视图的新模型。以下是示例视图代码:

CREATE VIEW vw_combined_audio_images AS
SELECT user_id, created, modified, foo, null as bar, 'image' as type
FROM images
UNION
SELECT user_id, created, modified, null, bar, 'audio'
FROM audio;

对我来说,我需要在一张桌子而不是另一张桌子上的田地。在代码示例中,您可以看到images表具有不在音频中的“foo”,而在图像中没有“bar”。 (请注意数据类型转换。)我还使用一个字段来确定它是哪种类型的记录(参见上面的“类型”。)

然后创建模型

class Asset extends AppModel{
public $useTable = 'vw_combined_audio_images';
public $belongsTo = array('User' => array(####));
}

然后将模型添加到User模型的$ hasMany数组