Phalcon — Ленивая загрузка не работает в моделях по какой-то странной причине

Я новичок в phalcon и больше знаком с Symfony, мне просто нужно знать, как определить необязательные отношения между внешними ключами в моделях phalcon.

т.е.
Таблица пользователей PK — это user_id, и пользователи могут иметь (необязательно) связанную запись в таблице Photos, чтобы иметь фотографию с первичным ключом photo_id и связать ее с user_id.

Поэтому в моих моделях сокола мне нужно загружать пользователей фотографиями, если они есть.

В модели пользователя

 public function initialize()
{
$this->hasMany(
"photo_id",
"Photo",
"photo_id",
array(
'alias' => 'photos'
)
);
}

На фотомодели я пишу это как

public function initialize()
{
$this->belongTo(
"user_id",
"User",
"user_id",
array(
'alias' => 'user'
)
);
}

Вольт, чтобы получить доступ к нему через

{{user.photo.photo_id}}

Но это дает мне ошибку

Undefined property: Phalcon\Mvc\Model\Resultset\Simple::$photo_id

Любая идея ?

Странно, если сделать этот код в контроллере, он работает и получить мне модели фотографий, но не тогда, когда я пытаюсь получить к нему доступ с ленивой загрузкой /

$users = User::find(array(
"limit" => 10)
);
echo "There are ", count($users), "\n";
foreach($users as $user){
$photos = Photo::find(array(
"user_id=:user_id:",
"limit" => 10,
"bind" => array("user_id" => $user->user_id)
)
);
if($photos->count()==0){
echo "<br />";
echo "No photo found for user".$user->user_id;
}
foreach($photos as $photo){
echo '<br />';
echo "User ->".$photo->user_id." Photo -> ".$photo->photo_id;
}
}

Когда я пытаюсь сделать это с ленивой загрузкой, как это

foreach($users as $user){
//echo $user->photos->photo_id;
foreach($user->photos as $photo){
echo '<br />';
echo "User ->".$photo->user_id."  Photo -> ".$photo->photo_id;
}
}

Я получаю ошибку:

Неопределенное свойство: Phalcon \ Mvc \ Model \ Resultset \ Simple :: $ photo_id

0

Решение

Когда используешь $this->hasMany() Отношение вы должны перебрать все записи:

{% for userPhoto in user.photo %}
{{ userPhoto.photo_id }}
{% else %}
User has no photos
{% endfor %}

Также проверьте названия моделей (они должны совпадать с именами классов моделей):

$this->hasMany(
"users_id",
"Photos",
"photo_id",
array(
"alias" => "photo")
);

Также добавление единственного псевдонима для hasMany может быть запутанным (предыдущая версия ответа предполагала отношение один к одному), поэтому я бы назвал этот псевдоним "photos" не "photo",

С другой стороны, если User может иметь только один Photo затем используйте $this->hasOne(),

Пример:

        $this->hasOne(
'photo_id',
'Photos',
'id',
array('alias' => 'photo')
);

Структура базы данных:

Users: id, photo_id // other like name, email
Photos: id // other, like url, type, etc

Тогда вы могли бы использовать $this->photo->photo_id когда есть связанные данные в базе данных.

Самое простое решение тогда будет:

{% if user.photo %}{{ user.photo.photo_id }}{% endif %}

Во-вторых, ошибка: при использовании hasMany Отношение Phalcon дает вам результат поиска нескольких связанных объектов (так что это Phalcon\Mvc\Model\Resultset\Simple который по умолчанию возвращает «поиск нескольких объектов», как Model::find()).

1

Другие решения

Кажется, проблема вызвана тем, что у меня есть два подключения к базе данных, как показано ниже, что вызывает некоторые проблемы в наборе DI.

return new \Phalcon\Config(array(
'database'    => array(
'adapter'  => 'Mysql',
'host'     => 'localhost',
'username' => 'root',
'password' => '',
'dbname'   => 'db_main',
'name'   => 'db_main',
),

необходимо хранить только одну базу данных с именем «dbname»;

это все, что я сделал, чтобы исправить

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector