【问题标题】:Pretty HABTM List Entry漂亮的 HABTM 列表条目
【发布时间】:2011-11-05 14:07:55
【问题描述】:

我有一个配方、物品和单位表/模型。我与配方和项目有 HABTM 关系,并且在添加/编辑配方时得到默认的多选框。 (我大部分时间都在使用烘焙)。问题是我需要将数量和单位与每个项目关联起来。

我希望的 UI 示例:

它的一个重要组成部分是添加/删除/编辑单个项目的能力。我想看看提交的表单数据,并使用一些 jquery 和克隆会起作用。但我想知道是否有人已经为此创建了一个行为?

当前模型(缩写为相关内容,即删除的用户/注释/等):

class Item extends AppModel {
    var $name = 'Item';

// id : int
// name : varchar
// unit_id : int

    var $belongsTo = array(
        'Unit' => array(
            'className' => 'Unit',
            'foreignKey' => 'unit_id'
        ),
    );

    var $hasAndBelongsToMany = array(
        'Recipe' => array(
            'className' => 'Recipe',
            'joinTable' => 'recipes_items',
            'foreignKey' => 'item_id',
            'associationForeignKey' => 'recipe_id',
        )
    );
}

.

class Recipe extends AppModel {
        var $name = 'recipe';
        var $displayField = "name";

// id : int
// name : varchar


        var $hasAndBelongsToMany = array(
            'Item' => array(
                'className' => 'Item',
                'joinTable' => 'recipes_items',
                'foreignKey' => 'recipe_id',
                'associationForeignKey' => 'item_id',
            )
        );
    }

.

class RecipesItem extends AppModel {
    var $name = 'RecipesItem';

// id : int
// quantity : int
// unit_id : int
// recipe_id : int
// item_id : int



    var $belongsTo = array(
        'Unit' => array(
            'className' => 'Unit',
            'foreignKey' => 'unit_id'
        ),
        'Recipe' => array(
            'className' => 'Recipe',
            'foreignKey' => 'recipe_id'
        ),
        'Item' => array(
            'className' => 'Item',
            'foreignKey' => 'item_id'
        )
    );
}

【问题讨论】:

  • 据我所知,CakePHP 不允许您拥有关于 HABTM 关系的属性,因此您应该将前 2 个模型从 HABTM 更改为 hasMany 关系(将它们链接到 RecipesItem)。稍后,您可以为 RecipesItem 烘焙 MVC,您将完成所有工作。要完成您的要求,您可以将烘焙的添加视图“移动”到 Recipes add 方法,对 JS 进行必要的更改。

标签: list cakephp clone has-and-belongs-to-many cloneable


【解决方案1】:

不太清楚你在问什么。要添加、编辑和删除项目,您需要在项目控制器中创建操作。假设您的表单设置正确,保存关联数据(即配方具有哪些项目)应该或多或少由控制器操作中的 save() 方法自动处理。

出于好奇,RecipesItem 模型是从哪里来的?那代表什么?如果我对您的理解正确,那么您有一个带有 HABTM 关系的 Recipe 模型和一个 Item 模型。他们的连接表不需要模型,recipes_items 表只是关联两个模型中的项目。

【讨论】:

  • 基本上是一种自动“魔法”(即烘焙或行为),它将在模型中创建那种表单元素......如果它存在(或者很容易创建)。我制作了第 3 个模型,希望我可以定义该字段元素应该具有其他相关字段(仍然通过 Cake 感觉),并让 bake 创建适当的输入,
【解决方案2】:

这不是 Cake 能为你做的事。也许有一些 js 可以帮助你一点,但你几乎必须为此编写自己的 javascript。

【讨论】:

    【解决方案3】:

    您必须使用 javascript 将选择标签“转换”为“更酷”的东西。

    这是我经常使用的 jquery-multiselect 插件。您可以轻松地将其设置为用 1 行代码替换所有多选。

    更多信息在这里: http://www.erichynds.com/jquery/jquery-ui-multiselect-widget/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-05
      • 2012-10-24
      • 2020-06-11
      • 2013-09-11
      • 2011-01-02
      • 2022-01-22
      • 2015-08-27
      相关资源
      最近更新 更多