Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cakephp 2.1 cakephp关系属于_Cakephp 2.1 - Fatal编程技术网

Cakephp 2.1 cakephp关系属于

Cakephp 2.1 cakephp关系属于,cakephp-2.1,Cakephp 2.1,我使用的是CakePHP2.1.3,我有一个表配料和一个表配料 我希望在我的页面索引中的成分当我选择一个InGedentialia时,我希望看到InGedentialia和一些成分文件 但是我不知道我是否必须对我的控制器进行两次查询,或者只设置id和cakephp来自动检索数据。现在我在我的控制器中做了两个查询,但我不知道这是否是最好的方法 $this->set('ingredient', $this->Ingredient->read()); $this

我使用的是CakePHP2.1.3,我有一个表配料和一个表配料 我希望在我的页面索引中的成分当我选择一个InGedentialia时,我希望看到InGedentialia和一些成分文件 但是我不知道我是否必须对我的控制器进行两次查询,或者只设置id和cakephp来自动检索数据。现在我在我的控制器中做了两个查询,但我不知道这是否是最好的方法

$this->set('ingredient', $this->Ingredient->read());            $this->set('ingredient_alias',$this->Ingredient->IngredientAlias->read()); 
这是我的桌子:

class Ingredient extends AppModel {
    public $name = 'Ingredient';
    public $useTable = 'ingredients';
    public $belongsTo = 'User';

    public $hasMany = array (
        'IngredientAlias' => array (
            'className'     => 'IngredientAlias',
            'foreignKey'    => 'ingredient_id'
        )
    );
}

class IngredientAlias extends AppModel {
    public $name = 'IngredientAlias';
    public $useTable = 'ingredient_aliases';
    public $belongsTo = array(
        'Ingredient' => array(
            'className'    => 'Ingredient',
            'foreignKey'   => 'ingredient_id'
        )
    );
}
这是我的IngreditsController(我已经更改了将alias放入参数的路径,它正在工作)


根据您描述的关系,如果您有
成分id
请在
成分别名表中键入,如果您调用:

$this->Ingredient->find('first', array('conditions' => array('Ingredient.id' => $id)));
您将获得由$id指定的配料记录及其所有关联的IngRadientalias记录,其数组结构类似于以下内容:

Array =>
    [Ingredient] => Array
                        [id] => 3
                        [other_data_from_DB] =>
                        .....
    [IngredientAlias] => Array => 
                         [0] => Array =>
                                [id] => 1
                                [ingredient_id] => 3
                                [other_data_from_DB] =>
                                ....
                         [1] => Array =>
                                [id] => 2
                                [ingredient_id] => 3
                                [other_data_from_DB] =>
                                ....
                         [2] => Array =>
                                [id] => 3
                                [ingredient_id] => 3
                                [other_data_from_DB] =>
                                ....
IngRadientalias数组子结构由于hasMany关系而被索引。 如果您没有看到关联的InGedentialia记录,请检查:

如果它等于-1,则只提取成分模型数据。查看我提供的链接中其他递归值的作用

如果您想换一种方式,则应使用IngRedentilias模型:

$this->IngredientAlias->find('first', array(CONDITIONS));

将为其关联的成分记录提供成分记录中规定的条件。成分记录将仅为一个,因为
IngRadientalias属于成分
关系。

但我只想要具有该别名的IngRadientalias,我认为这是一个子查询,因为我必须搜索成分的id,并在准确的别名之后搜索,因为我只想要一个IngRadientalias(选定的IngRadientalias)然后,只需换一种方式-搜索InGedentalia,您将获得连接的成分记录。;)所以$this->IngredientAlias->find('first',array(CONDITIONS));当您定义了两个关系时,它将提供您所需的内容。这是一样的,但是如果您按照CakePHP约定做所有事情,框架将为您发挥神奇的作用,您就不必费心了。当然,您也可以通过在Model::find()调用的“joins”键中指定连接条件来执行所谓的即席连接。您甚至可以编写自定义SQL语句,并使用Model::query()方法调用它,但同样,只要您遵循约定,CakePHP将为您发挥神奇的作用。
debug($this->Ingredient->recursive);
$this->IngredientAlias->find('first', array(CONDITIONS));