Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/cakephp/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cakephp find返回多个HABTM关系_Cakephp - Fatal编程技术网

Cakephp find返回多个HABTM关系

Cakephp find返回多个HABTM关系,cakephp,Cakephp,我有一个模型通话播放列表。 播放列表中有一个带有曲目的HABTM public $hasAndBelongsToMany = array( 'Track' => array( 'className' => 'Track', 'joinTable' => 'tracklists_tracks', 'foreignKey' => 'tracklist_id', 'associationForeignKey

我有一个模型通话播放列表。 播放列表中有一个带有曲目的HABTM

public $hasAndBelongsToMany = array(
    'Track' => array(
        'className' => 'Track',
        'joinTable' => 'tracklists_tracks',
        'foreignKey' => 'tracklist_id',
        'associationForeignKey' => 'track_id',
        'unique' => 'keepExisting',
        'conditions' => '',
        'fields' => array('id','title','version'),
        'order' => 'TracklistsTrack.timing'
    )
);
Track有一个带有AppUser的HABTM

public $hasAndBelongsToMany = array(
    'Artist' => array(
        'className' => 'AppUser',
        'joinTable' => 'artists_tracks',
        'foreignKey' => 'track_id',
        'associationForeignKey' => 'artist_id',
        'unique' => 'keepExisting',
        'conditions' => '',
        'fields' => array('id','username') 
    )
);
现在,我想,当我写这篇文章的时候

$tracklist=$this->tracklist->findById$id

要获取每个轨迹列表中的所有轨迹,这确实会按照预期工作,对于每个轨迹,所有应用程序用户都会层叠

注意,如果我写$this->Track->findById$id; 我实际上可以获得与该曲目相关的应用程序用户

多亏了我勤勉的命名约定,有什么想法可以让这个开箱即用吗


谢谢

如果您在模型中定义了正确的关系,我建议您使用CakePHP containable行为

您所需要做的就是将行为包括在模型中,并将以下内容放入控制器中

$this->TrackList->contain(array('AppUser','Artist'));

你能把两种型号都写下来吗?我对AppUser和Artist有点困惑。建议:通常你应该将你的HABTMs转换成hasMany,就像一个连接模型,以获得更好的灵活性。HABTMS变得非常难以管理,你可以阅读:当然,所以艺术家只是一个别名,我使用AppSube,因为一个轨道将有艺术家,但也是混合器,都是Appulr.Tab思:第一个HabTM秒和连接表是第一秒秒。您的模型将分别为第一、第二和第一、第二。First有许多FirstsSecond,Second有许多FirstsSecond,FirstsSecond属于First,Second。在这些关联之后使用Containeable,检索和保存复杂联接的数据变得非常简单。还要确保你的数据库设计是好的,你不是在寻找一个三元关系-