【问题标题】:CakePHP Containable Behaviour limit Intermediate ModelCakePHP 可包含行为限制中间模型
【发布时间】:2013-10-10 17:15:13
【问题描述】:

CakePHP 我正在使用可包含的行为,但我怀疑是否要停止来自中间模型的数据。

假设我有这个结构

Song -> Tracklist -> Album

因此,当我将 Containable 行为放在 Song Model 上时,它会获取带有所需字段的专辑数据。但在每次调用中,它也会获取中间模型 Tracklist 的全部数据。

我的可收容行为是这样的。

$contain =  array('Tracklist'=>array('Album'=>array('id','name')));
$this-Song->find('first', array('contain'=>$contain));

像这样。我的数据是这样的

 [Tracklist] => Array
    (
        [0] => Array
            (
                [id] => 50
                [album_id] => 229
                [song_id] => 38
                [video_link] => 
                [status] => 0
                [featured] => 0
                [user_id] => 
                [created] => 
                [modified_by] => 
                [modified] => 
                [Album] => Array
                    (
                        [name] => Marasim
                        [slug] => marasim
                    )
            )

        [1] => Array
            (
                [id] => 2748
                [album_id] => 489
                [song_id] => 38
                [video_link] => 
                [status] => 1
                [featured] => 0
                [user_id] => 
                [created] => 2013-10-09 17:58:53
                [modified_by] => 
                [modified] => 2013-10-09 17:58:53
                [Album] => Array
                    (
                        [name] => Dummy Album
                        [slug] => dummy-album
                    )

                    )
            )
        [2] => Array
            (
                [id] => 2749
                [album_id] => 489
                [song_id] => 38
                [video_link] => 
                [status] => 1
                [featured] => 0
                [user_id] => 
                [created] => 2013-10-09 17:59:42
                [modified_by] => 
                [modified] => 2013-10-09 17:59:42
                [Album] => Array
                    (
                        [name] => Dummy Album
                        [slug] => dummy-album
                    )
            )
     )

我只想限制来自中间模型的数据。这可能吗?

【问题讨论】:

  • 我有同样的问题......希望有人有魔法阻止中间模型被获取。 :(
  • 你不想检索相册数据,对吧?
  • @Moyed:我不想检索中间模型意味着我的数据应该在Tracklist->0->Album->AlbumData 的路上。像这样.. 我应该怎么做才能从 Tracklist 中获取特定数据,或者从 Tracklist 中获取任何数据,就像这样 (Tracklist->0('id', 'album_id')->Album->AlbumData)。

标签: cakephp cakephp-2.3


【解决方案1】:

试试

  $contain =  array('Tracklist'=>array(
        'fields' = array('id'),
        'Album'=>array('id','name')
  ));
  $this-Song->find('first', array('contain'=>$contain));

【讨论】:

  • 虽然我尝试了同样的方法,但它获取了链接到其他关联的中间模型的一些字段。意味着如果我的关系像 Tracklist->0->Album-> 那么它肯定会获取像这样的数据 Tracklist->0('album_id')->Album->AlbumData
【解决方案2】:
$data = $this-Song->find('first', array('contain'=>$contain));

// Extract the Album's of the playlist
$data = Hash::extract($data, '{n}.Tracklist.Album');

// debug($data)
[Album] => Array (
                    [name] => Marasim
                    [slug] => marasim
                 )
...

如果这不完全是您想要的输出,请给我一个您想要的示例,我将编辑我的答案。 :)

【讨论】:

    猜你喜欢
    • 2012-10-23
    • 1970-01-01
    • 2012-02-03
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    相关资源
    最近更新 更多