首页 文章

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

提问于
浏览
1

我正在使用Cakephp 2.x ..我有两个表进入我的数据库名称 ImagesAudios ..都有一个 userid 字段...首先我想要的是我想要检索数据并按 date 字段排序在两个表格中...在我的视图页面上,我想按日期显示图像和视频...

例如image1,video2,video3,image2

现在我在Images模型中这样做

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

    我有同样的情况 . {虽然收效甚微,但我尝试使用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;
    

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

    然后创建模型

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

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

  • 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‘]
    }
    ?>
    

相关问题