【发布时间】:2019-07-24 05:18:56
【问题描述】:
我是 PHP 和 MySQL 的新手。我正在 Cphalcon 框架上构建自己的动漫 CMS,但在多对多关系方面存在一些问题,无法正确查询。
我在 MariaDB 上有 3 个表:
动漫:
id
title
slug
cover
季节:
id
name
animeId
剧集:
id
animeId
seasonsId
name
cover
还有来自 phalcon 的 3 个模型:
动漫:
<?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 %}
实际上代码可以工作,但是 它只返回第一季的剧集,而不是每一季
来自 db 的示例:
动漫:
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?
【问题讨论】:
-
代码看起来不错,并且可以正常工作。我会仔细查看数据 - 仔细检查 Test Name3 是否确实与第 2 季相关。
标签: php database many-to-many phalcon