Belirleyen model ilişkiler yüklemek için

5 Cevap php

(Ben Kod Igniter kullanmak için kullanılan) bir başlangıç ​​Kek kullanıcısıyım ama iyi genel olarak php ve çerçeve işleri tecrübeli. Nasıl ve aşağıdaki modeli arayabilirsiniz sadece Albüm kayıtları, Sanatçı kayıtları ve ilgili ArtistImage kayıtları değil dönmek.

class Artist extends AppModel {

	var $name 	= 'Artist';
	var $hasMany 	= array('Album', 'ArtistImage');

}

Ayrıca, $ için değerlerin bu-Sanatçı-> özyinelemeli ne açıklamak yapabilirsiniz?

Yardımlarınız için teşekkürler

5 Cevap

Ben sorun Sanatçı Modeli olduğunu düşünüyorum. Davranış eklemek için doğru yolu

<?php
    Class Artist extends AppModel
    {
        public $name = "Artist";
        public $actsAs = array( 'Containable' );
    }
?>

ActsAs değişken çoğul fark, sizin modeli tekil olarak değişken ile $ ACTAS = array (..) olarak vardır.

    // Artist /app/models/artist.php
    class Artist extends AppModel {

        var $name       = 'Artist';
        var $hasMany    = array('Album', 'ArtistImage');
        var $actAs      = array('Containable');
    }


    // ArtistsController /app/controllers/artists_controller.php
    class ArtistsController extends AppController {

       var $name        = 'Artists';

       public function example() {

           debug( $this->Artist->find( 'all' );

           debug( $this->Artist->find( 'all', array(
               'recursive' => 0,
           ));

           debug( $this->Artist->find( 'all', array(
               'contain' => array(
                  'ArtistImage' => array(
                      // artist find options here i.e. fields, conditions, order etc
                  ),
               );
           ));
       }
    }

    // results
    // with just find( 'all' )
    Array
    (
        [0] => Array
            (
                [Artist] => Array
                    (
                        [id] => 1,
                        [name] => Wumpscut
                    ),
                [Album] => Array
                    (
                        [0] => Array
                            (
                                [id] => 1,
                                [artist_id] => 1,
                                [name] => Bunker Gate Seven
                            ),
                        [1] => Array
                            (
                                [id] => 2,
                                [artist_id] => 1,
                                [name] => Born Again
                            )
                    ),
                [ArtistImage] => Array
                    (
                        [0] => Array
                            (
                                [id] => 1,
                                [artist_id] => 1,
                                [file] => Bunker-Gate-Seven-Cover.jpg
                            ),
                        [1] => Array
                            (
                                [id] => 2,
                                [artist_id] => 1,
                                [file] => Born-Again-Cover.jpg
                            )
                    )
            ),
        [1] => Array
            (
                [Artist] => Array
                    (
                        [id] => 2,
                        [name] => Oneriod Psychosis
                    ),
                [Album] => Array
                    (
                        [0] => Array
                            (
                                [id] => 3,
                                [artist_id] => 2,
                                [name] => Fantasies About Illness
                            ),
                    ),
                [ArtistImage] => Array
                    (
                        [0] => Array
                            (
                                [id] => 3,
                                [artist_id] => 2,
                                [file] => Fantasies-About-Illness-Cover.jpg
                            ),
                    )
            )
    )


    // results
    // with recursive 0
    Array
    (
        [0] => Array
            (
                [Artist] => Array
                    (
                        [id] => 1,
                        [name] => Wumpscut
                    ),

            ),
        [1] => Array
            (
                [Artist] => Array
                    (
                        [id] => 2,
                        [name] => Oneriod Psychosis
                    )
            )
    )


    // results
    // with find( 'all', array( 'contain' => array( 'ArtistImage' ))

    Array
    (
        [0] => Array
            (
                [Artist] => Array
                    (
                        [id] => 1,
                        [name] => Wumpscut
                    ),
                [ArtistImage] => Array
                    (
                        [0] => Array
                            (
                                [id] => 1,
                                [artist_id] => 1,
                                [file] => Bunker-Gate-Seven-Cover.jpg
                            ),
                        [1] => Array
                            (
                                [id] => 2,
                                [artist_id] => 1,
                                [file] => Born-Again-Cover.jpg
                            )
                    )
            ),
        [1] => Array
            (
                [Artist] => Array
                    (
                        [id] => 2,
                        [name] => Oneriod Psychosis
                    ),
                [ArtistImage] => Array
                    (
                        [0] => Array
                            (
                                [id] => 3,
                                [artist_id] => 2,
                                [file] => Fantasies-About-Illness-Cover.jpg
                            ),
                    )
            )
    )

O bunu açıklamak için yardımcı olur umarım

Containable davranışı (book.cakephp.org/view/474/Containable) aradığınız budur.

Özyinelemeli gayrimenkuller (book.cakephp.org/view/439/recursive) kayıtları alınırken CakePHP ilişki-bilge gitmeli nasıl derin söyler.

Eğer pastebin içine denetleyicisi ve modelini gönderebilir miyim? İşiniz bittiğinde burada bu link.

Lütfen pastebin girişinde kullandığınız ...

if( $images ) {
    echo( "Loading Artist Images" );
    $this->Artists->recursive = 1;
    $this->Artists->contains( 'ArtistImage' );
} else { ...

Bu alışkanlık bir kaç nedenden dolayı çalışır.

First - the Model names need to be Singular. I.E. Artists = Artist Second - the Containable behavior does not have a function "contains", the correct function name is also singular. I.E contains( 'ArtistImage' ) = contain( 'ArtistImage' )

Yani burada ya gitmek, FTFY.

if( $images ) {
    echo( "Loading Artist Images" );
    $this->Artist->contain( 'ArtistImage' );
} else { ...

Hope this clarifies things for you. http://book.cakephp.org/view/474/Containable http://book.cakephp.org/view/22/CakePHP-Conventions

Ayrıca, ben var olmayan bir model işlevi çağırarak inanıyorum kullanıyor Cake sürümüne bağlı olarak (yani Model-> içerir (...)) deneyin ve Model dosyası yoksa, mysql Bir saklı yordam arayacak bu isimde bir işlevi var.

Modeli Albüm, bu yüzden yerine $ this-> Albümler bu-> Albüm $ olmalıdır

App :: import ('Modeli', 'Albüm');

$this->Album->contain('Song'); $items = $this->Album->findAllByArtistId($artist_id);