Salut,

Je rencontre un problème avec un belongsTo et un paginate.

En faite j'ai une pages qui récupères chaque postes en ligne et qui doit les affichais dans l'odre décroisent de création donc le plus récent au debut. Sauf que avec mon belongsTo il n'affiche rien, sauf une grande ligne d'erreur.

Database Error
Error: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous
SQL Query: SELECT `Review`.`id`, `Review`.`title`, `Review`.`id_category`, `Review`.`content`, `Review`.`slug`, `Review`.`created`, `Review`.`online`, `Review`.`id_author`, `Category`.`name`, `User`.`username` FROM `1_dev`.`reviews` AS `Review` LEFT JOIN `1_dev`.`categories` AS `Category` ON (`Review`.`id_category` = `Category`.`id`) LEFT JOIN `1_dev`.`users` AS `User` ON (`Review`.`id_author` = `User`.`id`) WHERE `id` = 7 LIMIT 1
Notice: If you want to customize this error message, create app/View/Errors/pdo_error.ctp

Voila mon BelongsTo

<?php
class Review extends AppModel{

    public $name ='Review';
    public $belongsTo = array(
        'Category' => array(
             'foreignKey' => 'id_category',
             'fields' => array('Category.name'),
             ),
        'User' => array(
            'foreignKey' => 'id_author',
            'fields' => array('User.username')
        )
    );
...

et mon début de ReviewsController

class ReviewsController extends AppController{

    public $paginate = array(
            'limit' => 15,
            'order' => array(
            'Review.created' => 'desc'
            )
    );
        public $uses = array('Review','Category');

    function index(){
        Controller::paginate();
        $data = $this->paginate('Review', array('Review.online' => 1));
        $this->set('review', $data);
    }

Voila, j'espere avoir donner assez d'indication :)

Merci d'avance

3 réponses


zenkiai
Réponse acceptée

dans ta ligne 3 de ta fonction show, met plutôt

'conditions' => array('Review.id' => $id)

Essaye en précisant dans ton model de quel model vient id_category et id_author comme tu l'a fait pour tes fields.
A priori ton erreur SQL vient du fait qu'il ne sait pas quel id choisir..

En faite hier je me suis tromper mais c'est ce controller

function show($id = null, $slug = null){
        $review = $this->Review->find('first', array(
            'conditions' => array('id' => $id)
           ));
        if(empty($review)){
            throw new NotFoundException('Aucun review ne correspond à cet adresse');
        }
        if($slug != $review'Review']'slug']){
            $this->redirect($review'Review']'link'], 301);
        }
        $this->set('review', $review);
    }

Zenkiai, je n'est pas trop compris ce que tu voulais dire ?