Bonjour,

J'ai fait une petite application en utilisant le plugin "Media". Et je me retrouve avec un problème sur la colonne Thumb après avoir copier mon projet sur un autre poste (ainsi que la BDD)

Voici le message que j’obtiens :
Database Error
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Thumb.file' in 'field list'
SQL Query: SELECT Menu.title, Thumb.file FROM mydb.menus

J'obtiens cette erreur uniquement sur le nouvel environnement (un OS Rasbian pour Rasberry), sur mon poste, ce dernier marche comme sur des roulette.
J'utilise PHP 5.4.4-14, mysql et apache2.

Quelqu'un aurait-il un idée? Je sèche complètement :(

Merci d'avance!

4 réponses


Salut,

A priori, il manque la jointure avec la table Thumb dans ta requête.
Tu es sur que le recursive de ton find est bon ? Tu utilises containable ?

A+

La jointure est bonne oui, sachant que ça marche sur mon environement de dev.
Voici mon model:

<?php
App::uses('AppModel', 'Model');
/**
 * Menu Model
 *
 * @property image $image
 */
class Menu extends AppModel {
 public $actsAs = array('Media.Media'=> array(
            // Ici vous pouvez spécifier des options (facultative)
            'path' => 'img/filecache/menu/%f'));
 /**
 * Display field
 *
 * @var string
 */
    public $displayField = 'title';
/**
 * Validation rules
 *
 * @var array
 */
    public $validate = array(
        'id' => array(
            'uuid' => array(
                'rule' => array('uuid'),
                //'message' => 'Your custom message here',
                //'allowEmpty' => false,
                //'required' => false,
                //'last' => false, // Stop validation after this rule
                //'on' => 'create', // Limit validation to 'create' or 'update' operations
            ),
        ),
        'title' => array(
            'notempty' => array(
                'rule' => array('notempty'),
                //'message' => 'Your custom message here',
                //'allowEmpty' => false,
                //'required' => false,
                //'last' => false, // Stop validation after this rule
                //'on' => 'create', // Limit validation to 'create' or 'update' operations
            ),
        ),
        'media_id' => array(
            'numeric' => array(
                'rule' => array('numeric'),
                //'message' => 'Your custom message here',
                //'allowEmpty' => false,
                //'required' => false,
                //'last' => false, // Stop validation after this rule
                //'on' => 'create', // Limit validation to 'create' or 'update' operations
            ),
        ),
    );
}

Et voici mon appel via le controller:

public function index() {
        $this -> set('menus', $this -> Menu -> find('all', array('fields' => array('Menu.title', 'Thumb.file'), 'contain' => array('Thumb'))));
    }

A moins que j'ai loupé quelque chose, mais je ne sais pas quoi :'(

Et la colonne existe bien dans ta table ?
Tu as la requête exact qui renvoi l'erreur car il n'y a qu'un fragment là.

La colonne Thumb n'existe pas, mais d'après ce que j'ai compris c'est le plugin media qui la 'virtualise' grace à la jointure avec 'media_id'.
Voici la stack trace complète:

Database Error
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Thumb.file' in 'field list'
SQL Query: SELECT Menu.title, Thumb.file FROM mabase.menus AS Menu WHERE 1 = 1
Notice: If you want to customize this error message, create app/View/Errors/pdo_error.ctp
Stack Trace
CORE/Cake/Model/Datasource/DboSource.php line 460 ? PDOStatement->execute(array)
CORE/Cake/Model/Datasource/DboSource.php line 426 ? DboSource->_execute(string, array)
CORE/Cake/Model/Datasource/DboSource.php line 670 ? DboSource->execute(string, array, array)
CORE/Cake/Model/Datasource/DboSource.php line 1081 ? DboSource->fetchAll(string, boolean)
CORE/Cake/Model/Model.php line 2696 ? DboSource->read(AppModel, array)
APP/Controller/MenusController.php line 20 ? Model->find(string, array)
[internal function] ? MenusController->index()
CORE/Cake/Controller/Controller.php line 486 ? ReflectionMethod->invokeArgs(MenusController, array)
CORE/Cake/Routing/Dispatcher.php line 187 ? Controller->invokeAction(CakeRequest)
CORE/Cake/Routing/Dispatcher.php line 162 ? Dispatcher->_invoke(MenusController, CakeRequest, CakeResponse)
APP/webroot/index.php line 96 ? Dispatcher->dispatch(CakeRequest, CakeResponse)

Merci de ton aide,

Je continue à gratter mais je ne trouve pas :(