Problem with INNER JOIN

I am frecnh student and new to CakePhp and I’m trying to display data from 2 different tables.

The request I want to make is :

SELECT code_produit, nom, description, prix_de_vente_en_cour, photo, actif
FROM produits INNER JOIN boutiques_produits ON idProduit = produit_id

My ProduitsController :

class ProduitsController extends AppController
{
    public $uses=array('Produits');

    public function index()
    {   
        $session = $this->request->getSession();
        $idCreateur = $session->read('Auth.idCreateur');
        $this->set(compact('idCreateur'));            

        $this->loadModel('BoutiquesProduits');            

        $query = $this->Produits->find('all', array(
            'joins' => array(
                array(
                    'table' => 'BoutiquesProduits',
                    'alias' => 'BoutiquesProduits',
                    'type' => 'INNER',
                    'conditions' => array(
                        'idProduit' => 'produit_id'
                    )
                )
            ),
            'conditions' => array(
                'createur_id =' => $idCreateur,
            ),
        ));           

        $produits = $this->paginate($query);
        $this->set(compact('produits'));
}

My index into Produit :

<table>
            <thead>
                <tr>
                    <th><?= $this->Paginator->sort('idProduit') ?></th>
                    <th><?= $this->Paginator->sort('code_produit') ?></th>
                    <th><?= $this->Paginator->sort('nom') ?></th>
                    <th><?= $this->Paginator->sort('description') ?></th>
                    <th><?= $this->Paginator->sort('prix') ?></th>
                    <th><?= $this->Paginator->sort('photo') ?></th>
                    <th><?= $this->Paginator->sort('actif') ?></th>
                </tr>
            </thead>
            <tbody>
                <?php foreach ($produits as $produit) : ?>
                    <td><?= h($produit->idProduit) ?></td>
                    <td><?= h($produit->code_produit) ?></td>
                    <td><?= h($produit->nom) ?></td>
                    <td><?= h($produit->description) ?></td>
                    <td><?php echo $produit->prix_de_vente_en_cour; ?>
                    </td>
                    <td class="image">
                        <?= $this->Html->image("photo.png") ?>
                    </td>
                    <td>
                        <?php
                        if ($produit->actif == 1) {
                            echo ('☑');
                        } else {
                            echo ('☐');
                        }
                        ?>
                    </td>
                    <td class="modification">
                        <?= $this->Html->image("Modifier.png", [
                            "alt" => "modifier",
                            'url' => [
                                'controller' => 'produits',
                                'action' => 'edit',
                                $produit->idProduit
                            ]
                        ]); ?>
                        <?= $this->Html->image("Dupliquer.png", [
                            "alt" => "dupliquer",
                            'url' => [
                                'controller' => 'produits',
                                'action' => 'duplicate',
                                $produit->idProduit
                            ]
                        ]); ?>
                    </td>
                    </tr>
                <?php endforeach; ?>
            </tbody>
        </table>

My Produit table :

public function initialize(array $config): void
    {
        parent::initialize($config);
        $this->setTable('produits');
        $this->setDisplayField('idProduit');
        $this->setPrimaryKey('idProduit');
        $this->belongsTo('Createurs', [
            'foreignKey' => 'createur_id',
        ]);
        $this->belongsTo('BoutiquesProduits', [
            'foreignKey' => 'produit_id',
        ]);
        
        $this->belongsToMany('Boutiques', [
            'foreignKey' => 'produit_id',
            'targetForeignKey' => 'boutique_id',
            'joinTable' => 'boutiques_produits',
        ]);
        
        $this->belongsToMany('Ventes', [
            'foreignKey' => 'produit_id',
            'targetForeignKey' => 'vente_id',
            'joinTable' => 'produits_ventes',
        ]);
    }

My BoutiquesProduits table :

class BoutiquesProduitsTable extends Table
{
    
    public function initialize(array $config): void
    {
        parent::initialize($config);
        $this->setTable('boutiques_produits');
        $this->setDisplayField('produit_id');
        $this->setPrimaryKey(['produit_id', 'boutique_id']);
        $this->belongsTo('Produits', [
            'foreignKey' => 'produit_id',
            'joinType' => 'INNER',
        ]);
        $this->belongsTo('Boutiques', [
            'foreignKey' => 'boutique_id',
            'joinType' => 'INNER',
        ]);
    }

My page :

As you can see, the price (prix) is not displayed while all other data from the product table is displayed.

Could someone explain the problem to me as I have been stuck for several days.

You should use joins that way. You should:

  1. Bake the model table & entity (bin/cake bake model BoutiquesProduits)
  2. Make sure the Produits has a hasMany relationship (see the book)
  3. After the find use innerJoinWith or matching

Matching does select data from the associated table, if you use innerJoin you have to manually select the columns you’re going to use.

Thanks for your answer, I have find an other solution