我正在处理一个旧项目,该项目由不在公司的人编码,该项目已由CakePHP 2.4.0
完成,我对CakePHP并不是非常熟悉
我遇到了一个奇怪的问题,其中belongsTo返回了错误的条目。我有三个表,订单,交易和城市,具有以下结构。
+----+---------+
| id | deal_id |
+----+---------+
| 1 | 1 |
+----+---------+
+----+---------+
| id | city_id |
+----+---------+
| 1 | 2 |
+----+---------+
+----+-----------+
| id | name |
+----+-----------+
| 1 | Montreal |
| 2 | Toronto |
| 3 | Ottawa |
| 4 | Québec |
| 5 | Vancouver |
| 6 | Calgary |
| 7 | Halifax |
+----+-----------+
在OrdersController
内,当我尝试检索城市名称时:
$this->Order->Deal->City->field('name');
我得到Calgary
而不是预期的Toronto
。因此,我查看了具有City.php
属性的orders
内部,这解释了为什么我接收Calgary
因为它的订购由城市的name
按升序排列。如果我将该媒体资源放入评论中,我会Montreal
而不是Toronto
,因为它不再按名称排序。
我知道我的交易有权city_id
,因为当我执行以下操作时,我会2
:
$this->Order->Deal->field('city_id'); // 2
class City extends AppModel
{
public $order = "City.name asc";
}
class Deal extends AppModel
{
public $belongsTo = array(
'City' => array(
'className' => 'City',
'foreignKey' => 'city_id'
)
);
}
现在我的问题是:
我已尝试获取模型的数据源,但它返回一个空日志。
$log = $this->Order->Deal->getDataSource()->getLog(false, false);
public function passengers($id = 0)
{
$this->Order->id = $id;
if (!$this->Order->exists()) {
$this->redirect('/');
}
$name = $this->Order->Deal->City->field('name');
var_dump($name); die;
}
答案 0 :(得分:2)
正如评论中已经提到的,Model::field()
发出一个新查询来从数据库中检索单个字段,仅限于您调用该方法的模型,即它需要id
开启要设置$this->Order->Deal->City
,然后使用该ID查询City
记录,它与关联或已检索的数据无关。
如果您希望关联City
的名称(通过Deal
)与ID为Order
的{{1}},则您需要查询{{ 1}}并确保包含$id
关联,或者设置了所需的$this->Order
级别:
City
或查询recursive
模型并包含通过关联表限制记录的必需连接。
如果您想查看生成的查询,请在$order = $this->Order->find('first', array(
'conditions' => array('id' => $id),
'contain' => 'Deal.City',
// or
// 'recursive' => 1
));
$name = $order['Deal']['City']['name'];
中启用调试模式,并进一步了解安装Debug Kit插件。
另见