這是我的第一個問題。我在cakephp 1.3中遇到了一個可容忍行爲的問題。問題是如下:我有一個交付模型下列協會:CakePHP 1.3包含不正確建立關聯
class Deliverable extends AppModel {
var $name = 'Deliverable';
var $displayField = 'name';
var $actsAs = array('Containable');
var $belongsTo = array(
'Asset' => array(
'className' => 'Asset',
'foreignKey' => 'asset_id',
'dependent' => false
),
'DelRouteName' => array(
'className' => 'DelRouteName',
'foreignKey' => 'del_route_name_id',
),
'AccessGroup' => array(
'className' => 'AccessGroup',
'foreignKey' => false,
'conditions' =>
'Deliverable.role_id = AccessGroup.id'
)
);
var $hasOne = array(
'Artifact' => array(
'className' => 'Artifact',
'foreignKey' => 'deliverable_id',
'dependent' => true,
)
);
var $hasMany = array(
'Delivery' => array(
'className' => 'Delivery',
'foreignKey' => 'deliverable_id',
'dependent' => true,
'order' => 'Delivery.gmt_created',
)
);
這裏是的分頁設置的配置:
$this->paginate['Deliverable'] = array_merge($this->paginate['Deliverable'], array(
'limit' => $this->getSysPref('items_per_page', 20),
'conditions' => array(
'Deliverable.role_id' => $this->myRoleSetIds(),
'Deliverable.asset_id' => $asset['Asset']['id'],
'Delivery.gmt_created >' => $keep_time
),
'order' => 'Deliverable.name',
'contain' => array(
'AccessGroup',
'Delivery' => array(
'conditions' => array(
'Delivery.gmt_created >' => $keep_time
),
'limit' => 1,
'order' => 'Delivery.gmt_created DESC'
),
'DelRouteName'
)
));
$deliverables = $this->paginate('Deliverable');
正如你可以看到,中容納行爲附加,定義的關聯以及包含的關聯模型(在分頁配置部分中)。
我遇到的這個問題是它能夠成功地查詢包含的模型「AccessGroup」和「DelRouteName」,但它沒有獲取關聯的「Delivery」數據。如果我在父模型(Deliverable)上設置了一個針對子模型(Delivery)的條件,則只會顯示錯誤,這是我之前完成的並且完全合法。我得到這個SQL錯誤,正如你所看到的,表交付根本沒有加入,但access_groups和del_route_names是。
這裏是蛋糕構建SQL:
SELECT "Deliverable"."id" AS "Deliverable__id", "Deliverable"."name" AS
"Deliverable__name", "Deliverable"."artifact_name" AS "Deliverable__artifact_name",
"Deliverable"."type" AS "Deliverable__type", "Deliverable"."asset_id" AS
"Deliverable__asset_id", "Deliverable"."del_route_name_id" AS
"Deliverable__del_route_name_id", "Deliverable"."artifact_id" AS
"Deliverable__artifact_id", "Deliverable"."status" AS "Deliverable__status",
"Deliverable"."delivery_id" AS "Deliverable__delivery_id",
"Deliverable"."deliverable_id"
AS "Deliverable__deliverable_id", "Deliverable"."gmt_created" AS
"Deliverable__gmt_created", "Deliverable"."locked" AS "Deliverable__locked",
"Deliverable"."frozen" AS "Deliverable__frozen", "Deliverable"."cloaked" AS
"Deliverable__cloaked", "Deliverable"."role_id" AS "Deliverable__role_id",
"DelRouteName"."id" AS "DelRouteName__id", "DelRouteName"."name" AS
"DelRouteName__name",
"DelRouteName"."type" AS "DelRouteName__type", "AccessGroup"."id" AS "AccessGroup__id",
"AccessGroup"."name" AS "AccessGroup__name", "AccessGroup"."dn" AS "AccessGroup__dn",
"AccessGroup"."filters" AS "AccessGroup__filters", "AccessGroup"."paths" AS
"AccessGroup__paths" FROM "deliverables" AS "Deliverable" LEFT JOIN "del_route_names"
AS "DelRouteName" ON ("Deliverable"."del_route_name_id" = "DelRouteName"."id") LEFT
JOIN "access_groups" AS "AccessGroup" ON ("Deliverable"."role_id" = "AccessGroup"."id")
WHERE "Deliverable"."role_id" = ('0') AND "Deliverable"."asset_id" = '2' AND
"Delivery"."gmt_created" > '1361391936' ORDER BY "Deliverable"."name" ASC LIMIT 50
這給了我這個錯誤(使用PostgreSQL)
Warning (2): pg_query() [http://php.net/function.pg-query]: Query failed: ERROR: missing FROM-clause entry for table "Delivery"
我不知所措就在這裏,所以任何幫助將不勝感激。讓我知道你是否還需要更多信息。
使用I加入子句PSQL命令行'LEFT JOIN 「交付」 爲 「傳送」 ON( 「交貨」, 「deliverable_id」= 「Deliverable.id)其中, 」交貨「,」 gmt_created」> 1 (我剛剛用一個例子) – 2013-03-22 20:42:36