CakePHP 3 - załączanie tego samego modelu wiele razy

Funkcja contain CakePHP jest bardzo pomocna, gdy chcesz dołączyć wiele modeli. Ale kiedy musimy wykonać bardziej złożoną operację, taką jak wielokrotne dołączanie do tej samej tabeli w oparciu o kolumnę, musimy zaktualizować nasz model. W tym artykule wyjaśnię jak to zrobić. Załóżmy, że mamy tabelę klientów, w której mamy dwie kolumny, w których jest przechowywany identyfikator tabeli adresów, pierwsza kolumna jest przeznaczona na identyfikator adresu zamieszkania klienta, a druga na identyfikator adresu dostawy. Zauważ, że oba identyfikatory adresów pochodzą z tabeli adresów (addresses). Teraz musimy powiedzieć CakePHP, aby załadował dane zgodnie z naszymi potrzebami, więc otwórz model tabeli klienta i dodaj poniższy kod w funkcji initialize.

public function initialize(array $config)
{
       parent::initialize($config);
    
       $this->belongsTo('PermanentAddress', [
            'foreignKey' => 'permanent_address_id',
            'joinType' => 'LEFT',
            'className' => 'Addresses'
        ]);
        $this->belongsTo('DeliveryAddress', [
            'foreignKey' => 'delivery_address_id',
            'joinType' => 'LEFT',
            'className' => 'Addresses'
        ]);
}
Teraz możemy użyć tego odniesienia aby załadować dane.
$customerAddress = $this->CustomerAddresses->findByCompanyId($companyId)
    ->contain([
        'PermanentAddress',
        'DeliveryAddress'
    ])
    ->first();