Jump to:

5541 Posts in 1738 Topics by 1224 members

Customising the CMS

SilverStripe Forums » Customising the CMS » complex data model

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

Page: 1
Go to End
Author Topic: 902 Views
  • jsaade
    Avatar
    Community Member
    18 Posts

    complex data model Link to this post

    Hi,
    I have searched the forums for this scenario and I cannot find it, here is my data model:

    - User A
       - Project 1
          - Specimen a
          - Specimen b
       - Project 2
          - Specimen a'
          - Specimen b'

    Each user has many projects, each project has many specimens.
    I am using $has_many and in the getCMSFields, I use HasManyComplexTableField.
    My problem is that if you go to the user, you can add/edit the "Projects"
    if you click on a project you can only edit the Specimens, you cannot add.
    The add button is simply missing.

    Translated into code:
    Member Object:

    <?php
    class Member_Object extends DataObject
    {
    static $db = array (
    "UserName"=>"Text",
          "Password"=>"Text"
    );
       
    static $has_many = array (
    'Projects' => 'Projects_Object'
    );

    public function getCMSFields()
    {
          $mng_records = new HasManyComplexTableField(
    $this,
    'Projects',
    'Projects_Object',
    array(
    'Title' => 'Title',
    ),
    'getCMSFields'
    );
           $fields = parent::getCMSFields();

    //Main Tab
    $fields->addFieldToTab("Root.Main", new UniqueTextField('UserName', 'User Name'));
    $fields->addFieldToTab("Root.Main", new TextField('Password',"Password"));
    $fields->addFieldToTab("Root.Projects", $mng_records);

    return $fields;
    }
       

    static $summary_fields = array(
    'UserName' => 'User Name'
    );
    }
    ?>

    Projects Object:

    <?php
    class Projects_Object extends DataObject
    {
    static $db = array (
    "Title"=>"Text",
        "ASTM"=>"Text",
        "Project"=>"Text",
        "Client"=>"Text",
        "Consultant"=>"Text",
        "DateOfTesting"=>"Text",
        "DateOfCasting"=>"Text",
        "AgeOfSpecimen"=>"Text",
        "Structure"=>"Text",
        "Formula"=>"Text",
        "StrengthRequired"=>"Text",
        "Slump"=>"Text",
        "TypeOfCuring"=>"Text",
        "TestedBy"=>"Text",
        "CheckedBy"=>"Text",
        "ClientRepresentative"=>"Text"
    );
       
       static $has_many = array (
    'Specimens' => 'Specimens_Object'
    );
       
    static $has_one = array (
    'ParentMember' => 'Member_Object'
    );
       function getCMSFields() {
        $mng_records = new HasManyComplexTableField(
    $this,
    'Specimens',
    'Specimens_Object',
    array(
    'SpecimenReference' => 'Specimen Reference',
    ),
    'getCMSFields'
    );
        $fields = parent::getCMSFields();

    //Main Tab
    $fields->addFieldToTab("Root.Main", new TextField( 'Title', 'Title'));
    $fields->addFieldToTab("Root.Main", new TextField( 'ASTM', 'ASTM'));
    $fields->addFieldToTab("Root.Specimens", $mng_records);
          return $fields;
    }
    static $summary_fields = array(
    'Title' => 'Title'
    );
    }
    ?>

    Specimens Object:

    <?php
    class Specimens_Object extends DataObject
    {
    static $db = array (
        "SpecimenReference"=>"Text",
        "Height"=>"Text",
        "Diameter"=>"Text",
        "Weight"=>"Text",
        "Density"=>"Text",
        "MaxLoad"=>"Text",
        "CompressiveStrength"=>"Text",
    "TypicalFracturePatterns"=>"Enum('Type I,Type II,Type III,Type IV,Type V,Type VI')",
    );
       
    static $has_one = array (
    'ParentProject' => 'Projects_Object'
    );
       function getCMSFields() {
        $category = new DropdownField('TypicalFracturePatterns','Typical Fracture Patterns',singleton('Specimens_Object')->dbObject('TypicalFracturePatterns')->enumValues());
        $fields = parent::getCMSFields();

    //Main Tab
    $fields->addFieldToTab("Root.Main", new TextField( 'SpecimenReference', 'Specimen Reference'));
          $fields->addFieldToTab("Root.Main", new TextField( 'Height', 'Height'));
          $fields->addFieldToTab("Root.Main", new TextField( 'Diameter', 'Diameter'));
          $fields->addFieldToTab("Root.Main", new TextField( 'Weight', 'Weight'));
          $fields->addFieldToTab("Root.Main", new TextField( 'Density', 'Density'));
          $fields->addFieldToTab("Root.Main", new TextField( 'MaxLoad', 'Max Load'));
    $fields->addFieldToTab("Root.Main",$category);
          return $fields;

    static $summary_fields = array(
    'SpecimenReference' => 'Specimen Reference'
    );
    }
    ?>

    So I can add a member, the go to that member, go to the projects tab, add a project but I cannot add specimens although
    according to my login it should work.

    What Am I doing wrong?

    Thank you.

  • jsaade
    Avatar
    Community Member
    18 Posts

    Re: complex data model Link to this post

    I am beginning to think it is a bug in nested has_many relations.
    it definitely relates to showing the nested relation.

    902 Views
Page: 1
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.