Cakephp 2.1 cakephp关系属于
我使用的是CakePHP2.1.3,我有一个表配料和一个表配料 我希望在我的页面索引中的成分当我选择一个InGedentialia时,我希望看到InGedentialia和一些成分文件 但是我不知道我是否必须对我的控制器进行两次查询,或者只设置id和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
$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));