【问题标题】:CakePhp model find with associationCakePhp 模型与关联查找
【发布时间】:2013-11-20 07:15:37
【问题描述】:

看来,我太笨了。我在这里和其他论坛中阅读了文档和 maaaaany 问题,但我仍然无法获得具有关联的查找方法来运行... 好像是有初学者的错误……

好的,代码如下:

ScriptParam-Model:

class ZToolScriptParam extends ScriptBuilderAppModel {
public $useTable ="z_tool_script_params";
public $primaryKey = "script_param_id"; 

 public $script_id;
public $parameter_name= "";
public $parameter_type= "";
 public $parameter_len= "";
public $parameter_right_len= "";

public $belongsTo = array(
    'ScriptBuilder.ZToolScript' => array(
        'className' => 'ScriptBuilder.ZToolScript',
        'foreignKey' => 'script_id',
    )
);
public $validate = array(

);

}

脚本模型:

class ZToolScript extends ScriptBuilderAppModel {
public $useTable ="z_tool_scripts";
public $primaryKey = "script_id";

public $script_name= "";
public $script_path= "";
public $script_file= "";

public $validate = array(
    'script_name' => array(
        'rule' => 'notEmpty'
    ),

);
public $hasMany = array(
    'ScriptBuilder.ZToolScriptParam' => array(
        'className' => 'ScriptBuilder.ZToolScriptParam',
        'foreignKey' => 'script_id',
        'dependent' => false
    )
);
}

我希望在调用 find-method 时得到模型和相关模型。

$scripts = $this->ZToolScript->find('all');

但我没有得到相关的模型:

Array
(
[0] => Array
    (
        [ZToolScript] => Array
            (
                [script_name] => test_sp2
                [script_path] => \webroot\scripte\
                [script_file] => test_sql.txt
                [script_id] => 1
            )

    )

我希望我犯了一个简单的错误,但不幸的是我没有看到错误。有人可以帮帮我吗?

问候

V

编辑:1

我更正了“ZToolScript”的链接。

编辑:2

添加模型的表模式:

CREATE TABLE [dbo].[z_tool_scripts](
    [script_name] [nvarchar](50) NULL,
    [script_path] [nvarchar](255) NULL,
    [script_file] [nvarchar](255) NULL
) 
GO
ALTER TABLE dbo.z_tool_scripts
   ADD script_id INT IDENTITY   

ALTER TABLE dbo.z_tool_scripts
   ADD CONSTRAINT PK_z_tool_scripts
   PRIMARY KEY(script_id)
GO
------------------------------------------------------------------------
CREATE TABLE [dbo].[z_tool_script_params](
    [parameter_name] [nvarchar](50) NULL,
    [parameter_type] [nvarchar](50) NULL,
    [parameter_len] [int] NULL,
    [parameter_right_len] [nchar](10) NULL,
    [script_id] [int] NOT NULL,
    [change_date] [date] NULL)

GO
ALTER TABLE dbo.z_tool_script_params
   ADD script_param_id INT IDENTITY 

ALTER TABLE dbo.z_tool_script_params
   ADD CONSTRAINT PK_z_tool_script_params
   PRIMARY KEY(script_param_id)

ALTER TABLE dbo.z_tool_script_params
add constraint z_tool_script_params_script_id_FK FOREIGN KEY ( script_id ) references  z_tool_scripts(script_id)

编辑 3:

好的,这是一个很长的问题: 我还有一个类似的问题。我尝试创建一个多对多关联:

<?php
App::uses('ProjectAdminAppModel', 'ProjectAdmin.Model');
class ZToolProject extends ProjectAdminAppModel {
public $useTable ="z_tool_project_steps";
public $primaryKey = "id";
public $name= "";
public $desc = "";
public $activ_step = true;
public $order = 0;
public $project_id;

public $hasAndBelongsToMany = array(
    'ZToolScript' =>
        array(
            'className' => 'ScriptBuilder.ZToolScript',
            'joinTable' => 'z_tool_psteps_scripts',
            'foreignKey' => 'step_id',
            'associationForeignKey' => 'script_id',
            'unique' => true,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'finderQuery' => '',
            'with' => ''
        )
);
}

连接的脚本模型与上面描述的相同。 下面是更进一步的 Create-SQL-Scripts:

CREATE TABLE [dbo].[z_tool_project_steps](
[name] [nvarchar](50) NULL,
[desc] [text] NULL,
[activ_step] [bit] NULL,
[order] [int] NULL,
[project_id] [int] NULL,
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

ALTER TABLE dbo.z_tool_project_steps
   ADD id INT IDENTITY  

ALTER TABLE dbo.z_tool_project_steps
   ADD CONSTRAINT PK_z_tool_projects_steps
   PRIMARY KEY(id)

ALTER TABLE dbo.z_tool_project_steps
add constraint z_tool_project_steps_project_id_FK FOREIGN KEY ( project_id ) references z_tool_projects(id)

    CREATE TABLE [dbo].[z_tool_psteps_scripts](
    [step_id] [int] NULL,
    [script_id] [int] NULL
) ON [PRIMARY]

GO

ALTER TABLE dbo.z_tool_psteps_scripts
   ADD con_id INT IDENTITY  

ALTER TABLE dbo.z_tool_psteps_scripts
   ADD CONSTRAINT PK_z_tool_psteps_scripts
   PRIMARY KEY(con_id)

ALTER TABLE dbo.z_tool_psteps_scripts
add constraint z_tool_psteps_scripts_script_id_FK FOREIGN KEY ( script_id ) references z_tool_scripts(script_id)

ALTER TABLE dbo.z_tool_psteps_scripts
add constraint z_tool_psteps_scripts_step_id_FK FOREIGN KEY ( step_id ) references z_tool_project_steps(id)

问题似乎是一样的。我也没有与正常的查找方法相关联。是主键问题吗?我无法想象,这是一个如此大的问题。 Pleeeeeease 谁能帮帮我???

【问题讨论】:

  • 您的ZToolScripts 模型与ZToolScripts 模型相关联,这实际上是您想要实现的吗?如果是这样,你的桌子就不对了。
  • 哦,是的,那是错误的......我更正了链接。但我仍然没有得到相关的模型。
  • 我不认为这是问题所在,但是......为什么你的模型使用复数名称而不是蛋糕约定要求的单数名称?另外:您收到任何警告吗?
  • 嗯,我真的不知道...复数没有直接的原因。我知道约定......不,没有任何警告,我有调试模式“2”。好像蛋糕不知道,有什么关联。也许我应该提到我使用 mssql。我还自己在数据库中创建了外键关系。但没有任何帮助。 :(
  • 你试过ContainableBehavior吗?

标签: cakephp model associations


【解决方案1】:

好的,我发现了我的问题。它没有显示在上面显示的代码中......我的问题是,我加载的模型如下:

$this->loadModel("ZToolScript");

问题是,模型在插件中,所以我必须像这样定义插件:

$this->loadModel("ScriptBuilder.ZToolScript");

我没有注意到这个问题,因为其他任何东西都可以正常运行,只有关联...

也许这可以帮助任何其他人。

问候

V

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    相关资源
    最近更新 更多