如何通过在 cakephp 中使用可包含的行为来获取具有国家、城市、州的用户 2.x
how to fetch users with countries, cities, states by using containable behavior in cakephp 2.x
我有这些型号:
国家、州、城市、用户
与关系:
国家有许多州,
州有许多城市,
城市有许多用户,
State belongsTo Country,
城市属于国家,
用户属于城市,
现在我想获取所有用户,不仅包括他们的城市,还包括国家和州。
我该怎么做?
控制器
users/index:
public function index() {
$this->User->Behaviors->load('Containable');
$this->paginate = array('contain'=>array('State'));
debug($this->Paginator->paginate());exit;
$this->set('users', $this->Paginator->paginate());
}
输出 :
Warning (512): Model "User" is not associated with model "State" [CORE\Cake\Model\Behavior\ContainableBehavior.php, line 342]
\app\Controller\UsersController.php (line 27)
array(
(int) 0 => array(
'User' => array(
'id' => '1',
'name' => 'username',
'city_id' => '1'
)
)
)
型号国家:
public $hasMany = array(
'State' => array(
'className' => 'State',
'foreignKey' => 'country_id',
'dependent' => false,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => ''
)
);
型号状态:
public $belongsTo = array(
'Country' => array(
'className' => 'Country',
'foreignKey' => 'country_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
public $hasMany = array(
'City' => array(
'className' => 'City',
'foreignKey' => 'state_id',
'dependent' => false,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => ''
)
);
型号城市:
public $belongsTo = array(
'State' => array(
'className' => 'State',
'foreignKey' => 'state_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
public $hasMany = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'city_id',
'dependent' => false,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => ''
)
);
型号用户:
public $belongsTo = array(
'City' => array(
'className' => 'City',
'foreignKey' => 'city_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
我已经解决了。感谢 cakephp 社区。
控制器 users/index
public function index() {
//$this->User->recursive = 3;
$this->User->Behaviors->load('Containable');
/* $user = $this->User->find('all', array(
'contain' => array(
'City.name' => array(
'State.name'=>array('Country.name')
))));
debug($user);exit;
*/
$this->paginate = array('contain'=>array('City'=>array('State'=>array('Country'))));
//debug($this->Paginator->paginate());exit;
$this->set('users', $this->Paginator->paginate());
}
查看users/index
<table cellpadding="0" cellspacing="0">
<thead>
<tr>
<th><?php echo $this->Paginator->sort('id'); ?></th>
<th><?php echo $this->Paginator->sort('name'); ?></th>
<th><?php echo $this->Paginator->sort('city_id'); ?></th>
<th><?php echo $this->Paginator->sort('state_id'); ?></th>
<th><?php echo $this->Paginator->sort('country_id'); ?></th>
<th class="actions"><?php echo __('Actions'); ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($users as $user): ?>
<tr>
<td><?php echo h($user['User']['id']); ?> </td>
<td><?php echo h($user['User']['name']); ?> </td>
<td>
<?php echo $this->Html->link($user['City']['name'], array('controller' => 'cities', 'action' => 'view', $user['City']['id'])); ?>
</td>
<td>
<?php echo $this->Html->link($user['City']['State']['name'], array('controller' => 'states', 'action' => 'view', $user['City']['State']['id'])); ?>
</td>
<td>
<?php echo $this->Html->link($user['City']['State']['Country']['name'], array('controller' => 'countries', 'action' => 'view', $user['City']['State']['Country']['id'])); ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
我有这些型号: 国家、州、城市、用户 与关系: 国家有许多州, 州有许多城市, 城市有许多用户,
State belongsTo Country, 城市属于国家, 用户属于城市,
现在我想获取所有用户,不仅包括他们的城市,还包括国家和州。 我该怎么做?
控制器 users/index:
public function index() {
$this->User->Behaviors->load('Containable');
$this->paginate = array('contain'=>array('State'));
debug($this->Paginator->paginate());exit;
$this->set('users', $this->Paginator->paginate());
}
输出 :
Warning (512): Model "User" is not associated with model "State" [CORE\Cake\Model\Behavior\ContainableBehavior.php, line 342]
\app\Controller\UsersController.php (line 27)
array(
(int) 0 => array(
'User' => array(
'id' => '1',
'name' => 'username',
'city_id' => '1'
)
)
)
型号国家:
public $hasMany = array(
'State' => array(
'className' => 'State',
'foreignKey' => 'country_id',
'dependent' => false,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => ''
)
);
型号状态:
public $belongsTo = array(
'Country' => array(
'className' => 'Country',
'foreignKey' => 'country_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
public $hasMany = array(
'City' => array(
'className' => 'City',
'foreignKey' => 'state_id',
'dependent' => false,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => ''
)
);
型号城市:
public $belongsTo = array(
'State' => array(
'className' => 'State',
'foreignKey' => 'state_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
public $hasMany = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'city_id',
'dependent' => false,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => ''
)
);
型号用户:
public $belongsTo = array(
'City' => array(
'className' => 'City',
'foreignKey' => 'city_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
我已经解决了。感谢 cakephp 社区。 控制器 users/index
public function index() {
//$this->User->recursive = 3;
$this->User->Behaviors->load('Containable');
/* $user = $this->User->find('all', array(
'contain' => array(
'City.name' => array(
'State.name'=>array('Country.name')
))));
debug($user);exit;
*/
$this->paginate = array('contain'=>array('City'=>array('State'=>array('Country'))));
//debug($this->Paginator->paginate());exit;
$this->set('users', $this->Paginator->paginate());
}
查看users/index
<table cellpadding="0" cellspacing="0">
<thead>
<tr>
<th><?php echo $this->Paginator->sort('id'); ?></th>
<th><?php echo $this->Paginator->sort('name'); ?></th>
<th><?php echo $this->Paginator->sort('city_id'); ?></th>
<th><?php echo $this->Paginator->sort('state_id'); ?></th>
<th><?php echo $this->Paginator->sort('country_id'); ?></th>
<th class="actions"><?php echo __('Actions'); ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($users as $user): ?>
<tr>
<td><?php echo h($user['User']['id']); ?> </td>
<td><?php echo h($user['User']['name']); ?> </td>
<td>
<?php echo $this->Html->link($user['City']['name'], array('controller' => 'cities', 'action' => 'view', $user['City']['id'])); ?>
</td>
<td>
<?php echo $this->Html->link($user['City']['State']['name'], array('controller' => 'states', 'action' => 'view', $user['City']['State']['id'])); ?>
</td>
<td>
<?php echo $this->Html->link($user['City']['State']['Country']['name'], array('controller' => 'countries', 'action' => 'view', $user['City']['State']['Country']['id'])); ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>