我是PHP和MySQL的新手。我正在建立自己的动漫CMS的Cphalcon框架,但有一些问题的关系多对多,不能正确查询。
我在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?发布于 2019-03-26 23:51:29
如果你在问如何建立多对多关系
动漫:
$this->hasManyToMany('id',__NAMESPACE__ . '\Episodes','animeId','seasonsId',__NAMESPACE__ . '\Seasons','id',['alias'=>'Seasons']);季节:
$this->hasManyToMany('id',__NAMESPACE__ . '\Episodes','seasonsId','animeId',__NAMESPACE__ . '\Anime','id',['alias'=>'Anime']);https://stackoverflow.com/questions/54957084
复制相似问题