首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Phalcon关系多对多,无法正确查询

Phalcon关系多对多,无法正确查询
EN

Stack Overflow用户
提问于 2019-03-02 17:30:51
回答 1查看 193关注 0票数 0

我是PHP和MySQL的新手。我正在建立自己的动漫CMS的Cphalcon框架,但有一些问题的关系多对多,不能正确查询。

我在MariaDB上有3个表:

动漫:

代码语言:javascript
复制
id
title
slug
cover

季节:

代码语言:javascript
复制
id
name
animeId

剧集:

代码语言:javascript
复制
id
animeId
seasonsId
name
cover

来自phalcon的3个型号:

动漫:

代码语言:javascript
复制
<?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'
    ]);
  }

}

季节:

代码语言:javascript
复制
<?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'
    ]);
  }

}

剧集:

代码语言:javascript
复制
<?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'
    ]);
  }

}

索引控制器中的操作如下:

代码语言:javascript
复制
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');
    }

视图:

代码语言:javascript
复制
  {% for seasons in ani.seasons %}
    {{ seasons.name }}
    <br/>
    {% for episodes in seasons.episodes %}
      {{ episodes.name }}
      <br/>
    {% endfor %}
  {% endfor %}

实际上,代码可以工作,但它只返回第一季的剧集,而不是每一季的剧集。

来自db的示例:

动漫:

代码语言:javascript
复制
 ID: 1
 Title: Test Anime
 Slug: test-anime
 Cover: /var/uploads/test.png

季节:

代码语言:javascript
复制
--------------------
     ID: 1
     Name: Season 1
     animeId: 1
--------------------
     ID: 2
     Name: Season 2
     animeId: 1
--------------------

剧集:

代码语言:javascript
复制
--------------------
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中得到了以下内容:

代码语言:javascript
复制
Season 1
Test Name
Test Name2
Season 2 
(and here nothing)
should be Test Name3?
EN

回答 1

Stack Overflow用户

发布于 2019-03-26 23:51:29

如果你在问如何建立多对多关系

动漫:

代码语言:javascript
复制
$this->hasManyToMany('id',__NAMESPACE__ . '\Episodes','animeId','seasonsId',__NAMESPACE__ . '\Seasons','id',['alias'=>'Seasons']);

季节:

代码语言:javascript
复制
$this->hasManyToMany('id',__NAMESPACE__ . '\Episodes','seasonsId','animeId',__NAMESPACE__ . '\Anime','id',['alias'=>'Anime']);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54957084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档