CakePHP:在视图中加载相关模型的名称字段
CakePHP: Load name field of related model on view
伙计们,我有一个简单但无聊的问题......
我有以下情况:
Solicitation -> HasMany -> Destiny
Destiny -> BelongsTo -> City
我的问题出在视图上,我想检索城市名称而不是 city_id,但我无法弄清楚。
这是我的结果:
array (size=12)
'Solicitation' =>
array (size=32)
'id' => string '25' (length=2)
'Destiny' =>
array (size=2)
0 =>
array (size=3)
'id' => string '3' (length=1)
'solicitation_id' => string '25' (length=2)
'city_id' => string '4382' (length=4)
1 =>
array (size=3)
'id' => string '4' (length=1)
'solicitation_id' => string '25' (length=2)
'city_id' => string '4350' (length=4)
如何在视图中检索城市名称?
这是我的控制器:
public function mySolicitations()
{
$this->Solicitation->recursive = 1;
$person_id = $this->Auth->user('id');
$conditions = array(
'Solicitation.created_by' => $person_id
);
$this->set(array(
'data' => $this->paginate('Solicitation', $conditions, array('Solicitation.id' => 'DESC')),
'title_for_layout' => 'My Solicitations'
));
}
我的关系有问题吗?
提前致谢。
有两种方法:
将模型递归值更改为 2。
$this->Solicitation->recursive = 2;
使用这个的缺点是当你有很多关联时,它会检索很多不需要的不必要的数据。
您可以在此处使用 "Containable" 行为。
$this->Solicitation->Behaviors->load("Containable");
并指定您要检索的模型名称:
$this->Solicitation->contain(array(
"Destiny", "Destiny.City"
)
);
然后添加您的代码:
$conditions = array(
'Solicitation.created_by' => $person_id
);
$this->set(array(
'data' => $this->paginate('Solicitation', $conditions, array('Solicitation.id' => 'DESC')),
'title_for_layout' => 'My Solicitations'
));
如果你调试,你肯定会在每个 Destiny 子数组中找到 "City" 索引。
希望对您有所帮助。
和平! xD
伙计们,我有一个简单但无聊的问题...... 我有以下情况:
Solicitation -> HasMany -> Destiny
Destiny -> BelongsTo -> City
我的问题出在视图上,我想检索城市名称而不是 city_id,但我无法弄清楚。
这是我的结果:
array (size=12)
'Solicitation' =>
array (size=32)
'id' => string '25' (length=2)
'Destiny' =>
array (size=2)
0 =>
array (size=3)
'id' => string '3' (length=1)
'solicitation_id' => string '25' (length=2)
'city_id' => string '4382' (length=4)
1 =>
array (size=3)
'id' => string '4' (length=1)
'solicitation_id' => string '25' (length=2)
'city_id' => string '4350' (length=4)
如何在视图中检索城市名称?
这是我的控制器:
public function mySolicitations()
{
$this->Solicitation->recursive = 1;
$person_id = $this->Auth->user('id');
$conditions = array(
'Solicitation.created_by' => $person_id
);
$this->set(array(
'data' => $this->paginate('Solicitation', $conditions, array('Solicitation.id' => 'DESC')),
'title_for_layout' => 'My Solicitations'
));
}
我的关系有问题吗? 提前致谢。
有两种方法:
将模型递归值更改为 2。
$this->Solicitation->recursive = 2;
使用这个的缺点是当你有很多关联时,它会检索很多不需要的不必要的数据。
您可以在此处使用 "Containable" 行为。
$this->Solicitation->Behaviors->load("Containable");
并指定您要检索的模型名称:
$this->Solicitation->contain(array(
"Destiny", "Destiny.City"
)
);
然后添加您的代码:
$conditions = array(
'Solicitation.created_by' => $person_id
);
$this->set(array(
'data' => $this->paginate('Solicitation', $conditions, array('Solicitation.id' => 'DESC')),
'title_for_layout' => 'My Solicitations'
));
如果你调试,你肯定会在每个 Destiny 子数组中找到 "City" 索引。
希望对您有所帮助。
和平! xD