Я новичок в PHP и MySQL.Я создаю свою собственную аниме CMS на платформе Cphalcon, но у меня есть некоторые проблемы с отношениями многие ко многим, и я не могу правильно запросить.
У меня есть 3 таблицы на MariaDB:
Аниме:
id
title
slug
cover
Сезоны:
id
name
animeId
Эпизоды:
id
animeId
seasonsId
name
cover
И 3 модели из phalcon:
Аниме:
<?php
namespace LearnPhalcon\Models;
use Phalcon\Mvc\Model;
use Phalcon\Validation;
use Phalcon\Validation\Validator\Uniqueness;
class Anime extends Model
{
public $id;
public $title;
public function initialize()
{
$this->hasMany('id', __NAMESPACE__ . '\Seasons', 'animeId', [
'alias' => 'seasons'
]);
$this->hasMany('id', __NAMESPACE__ . '\Episodes', 'animeId', [
'alias' => 'episodes'
]);
}
}
Сезоны:
<?php
namespace LearnPhalcon\Models;
use Phalcon\Mvc\Model;
use Phalcon\Validation;
use Phalcon\Validation\Validator\Uniqueness;
class Seasons extends Model
{
public $id;
public $name;
public function initialize()
{
$this->belongsTo('id', __NAMESPACE__ . '\Anime', 'id', [
'alias' => 'anime'
]);
$this->hasMany('id', __NAMESPACE__ . '\Episodes', 'seasonsId', [
'alias' => 'episodes'
]);
}
}
Эпизоды:
<?php
namespace LearnPhalcon\Models;
use Phalcon\Mvc\Model;
use Phalcon\Validation;
use Phalcon\Validation\Validator\Uniqueness;
class Episodes extends Model
{
public $id;
public $name;
public function initialize()
{
$this->belongsTo('id', __NAMESPACE__ . '\Anime', 'id', [
'alias' => 'anime'
]);
$this->belongsTo('id', __NAMESPACE__ . '\Seasons', 'id', [
'alias' => 'seasons'
]);
}
}
Действие внутри контроллера индекса здесь:
public function aniAction($slug)
{
$slug = $this->dispatcher->getParam('slug');
$ani = Anime::findFirst(array(
'slug = :slug:',
'bind' => array(
'slug' => $slug
)));
if ($ani === false) {
$this->dispatcher->forward(array(
'controller' => 'Error',
'action' => 'ops'
));
}
$this->view->setVar('ani', $ani);
$this->view->setTemplateBefore('public');
}
И вид:
{% for seasons in ani.seasons %}
{{ seasons.name }}
<br/>
{% for episodes in seasons.episodes %}
{{ episodes.name }}
<br/>
{% endfor %}
{% endfor %}
На самом деле код работает, но он возвращает только эпизоды в первом сезоне, а не для каждого сезона
Пример из БД:
Аниме:
ID: 1
Title: Test Anime
Slug: test-anime
Cover: /var/uploads/test.png
Сезоны:
--------------------
ID: 1
Name: Season 1
animeId: 1
--------------------
ID: 2
Name: Season 2
animeId: 1
--------------------
Эпизоды:
--------------------
ID: 1
animeId: 1
seasonsId: 1
name: Test Name
cover: n/d
---------------------
ID: 2
animeId: 1
seasonsId: 1
name: Test Name2
cover: n/d
---------------------
ID: 3
animeId: 1
seasonsId: 2
name: Test Name3
cover: n/d
---------------------
Из фактического тестового действия я получил это в HTML:
Season 1
Test Name
Test Name2
Season 2
(and here nothing)
should be Test Name3?