CakePHP не загружает связанные свойства с моделью на рабочий сервер - PullRequest
3 голосов
/ 11 июля 2011

Это странно.

У меня есть локальный сервер, на котором я разрабатываю приложения.Приложение для обзора продуктов, которое я разработал, работает на нем безупречно и использует ассоциативное моделирование Cake ($ hasMany, $ ownTo и др.).

После отправки этого приложения на производственный сервер происходит сбой.Дает мне сообщение об ошибке:

Notice (8): Undefined property: AppModel::$Product [APP/controllers/reviews_controller.php, line 46]

ReviewsController::home() - APP/controllers/reviews_controller.php, line 46
Dispatcher::_invoke() - CORE/cake/dispatcher.php, line 204
Dispatcher::dispatch() - CORE/cake/dispatcher.php, line 171
[main] - APP/webroot/index.php, line 83

Имеет debug() 'd $this и показывает, как день, что, пока локальный сервер загружает связанные модели, рабочий серверне.Базы данных являются зеркальными дубликатами (буквально, рабочий сервер был импортирован из dev db), и я могу вручную загружать модели, что говорит о том, что он прекрасно подключается к БД.

Что происходит на Земле?

ОБНОВЛЕНИЕ

Запрос sql с рабочего сервера выглядит так:

SELECT `Review`.`id`, `Review`.`title`, `Review`.`product_id`, `Review`.`score`, `Review`.`submitted`, `Review`.`reviewed`, `Review`.`right`, `Review`.`wrong`, `Review`.`user_id`, `Review`.`goals` 
FROM `reviews` 
AS `Review` 
WHERE 1 = 1 
ORDER BY `Review`.`submitted` desc LIMIT 10

Запрос sql с сервера dev выглядит следующим образом:

SELECT `Review`.`id`, `Review`.`title`, `Review`.`product_id`, `Review`.`score`, `Review`.`submitted`, `Review`.`reviewed`, `Review`.`right`, `Review`.`wrong`, `Review`.`user_id`, `Review`.`goals`, `User`.`id`, `User`.`username`, `Product`.`id`, `Product`.`name` 
FROM `reviews` 
AS `Review` 
LEFT JOIN `users` AS `User` ON (`Review`.`user_id` = `User`.`id`) 
LEFT JOIN `products` AS `Product` ON (`Review`.`product_id` = `Product`.`id`) 
WHERE 1 = 1 
ORDER BY `Review`.`submitted` desc LIMIT 10

ОБНОВЛЕНИЕ 2

Вот некоторые коды, на которые указывают ошибки:

$title = $this->Review->Product->find( 'first', array( 'fields' => array( 'Product.name' ), 'conditions' => array( 'Product.id' => $filter ) ) );

ОБНОВЛЕНИЕ 3

<?php
class Review extends AppModel {
var $name = 'Review';
var $displayField = 'title';

//The Associations below have been created with all possible keys, those that are not needed can be removed

var $belongsTo = array(
    'User' => array(
        'className' => 'User',
        'foreignKey' => 'user_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),
    'Product' => array(
        'className' => 'Product',
        'foreignKey' => 'product_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )       
);
}
?>

Ответы [ 5 ]

2 голосов
/ 26 июля 2011

У меня была эта проблема, и для меня это было связано с отсутствием поля в одной из таблиц базы данных. Я бы трижды проверил, чтобы убедиться, что обе БД абсолютно одинаковы (хотя вы сказали, что они были ...): не стесняйтесь использовать это 7-летнее приложение, чтобы проверить их: D http://www.mysqldiff.org/

Другие люди с этой проблемой говорили о проблемах с именами файлов и о том, что все файлы должны быть в нижнем регистре, так что это тоже может быть чем-то проверено ...

0 голосов
/ 03 августа 2011

вы можете распечатать трассировку стека, чтобы увидеть, вот код, который я вырвал с php.net

 echo "<div>Stack<br /><table border='1'>";
$aCallstack=debug_backtrace();
echo "<thead><tr><th>file</th><th>line</th><th>function</th><th>args</th></tr></thead>";
foreach($aCallstack as $aCall)
{
    if (!isset($aCall['file'])) $aCall['file'] = '[PHP Kernel]';
    if (!isset($aCall['line'])) $aCall['line'] = '';
    echo "<tr><td>{$aCall['file']}</td><td>{$aCall['line']}".
        "</td><td>{$aCall['function']}</td><td>";
        debug (($aCall['arg']));
        echo "</td></tr>";
}
echo "</table></div>";
die();

Будет трудно просмотреть все этохотя.

0 голосов
/ 02 августа 2011

Можете ли вы вставить модель обзора, модель продукта, AppModel, AppController и контроллер, с которого вы получаете ошибку.

Строка: Примечание (8): неопределенное свойство: AppModel :: $ Product [APP / controllers / reviews_controller.php, строка 46]

Кажется, указывает, что Модель Обзора загружает AppModel, а не файл, к которому вы хотите. В этом случае модель обзора не будет иметь ассоциации продуктов.

0 голосов
/ 02 августа 2011

У вас есть способ просматривать файлы на сервере, не проходя через ftp? У меня была проблема, подобная этой, когда временные метки были испорчены в файлах, и сервер не обновил файл. Мне пришлось удалить файлы, а затем повторно загрузить их. Возможно, вы уже попробовали это, но я просто подумал, что предложу такую ​​возможность. Возможно, некоторые из этих файлов устарели на сервере.

Хорошего дня!

0 голосов
/ 29 июля 2011

На самом деле - на первый взгляд, возможно, стоит использовать сдерживаемый , чтобы убедиться, что ваши вызовы данных согласованны.

Если вы не хотите проходить через сложность добавления содержимого(но я призываю вас сделать это - это одна из моих любимых функций cakephp), вы можете установить recursive в вызове find () просто для того, чтобы убедиться, что соответствующие модели загружены.

...