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.