1

我正在研究 Cakephp 2.x .. 我的数据库名称图像音频中有两个表.. 都有一个用户 ID字段...首先我想要的是检索数据并按日期字段排序在这两个表格中..在我的查看页面上,我想按日期显示图像和视频...

例如图像 1、视频 2、视频 3、图像 2

现在我在图像模型中这样做

   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'];

      }

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

4

2 回答 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;

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

然后创建模型

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

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

于 2013-07-26T11:08:40.187 回答
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‘]
}
?>
于 2013-07-25T14:59:34.140 回答