1

我尝试更新系统中的所有订单,但有一个“位置”条件。我如何在 CakePHP 2.3 中做到这一点?

// OrderFood.php (Model)
$orderFood = $this->updateAll(
    array(
        'OrderFood.price' => 'OrderFood.original_price',
        'OrderFood.discount_percent' => 0,
        'OrderFood.discount_amount' => 0,
    ),
    array(
        'Order.check_num' => $check_num
    )
);

// OrderFood.php (Model)
/**
 * belongsTo associations
 *
 * @var array
 */
public $belongsTo = array(
    'Order' => array(
        'className' => 'Order',
        'foreignKey' => 'order_num',
    ),
    'Food' => array(
        'className' => 'Food',
        'foreignKey' => 'food_num'
    )
);

// Order.php (Model)
/**
 * hasMany associations
 *
 * @var array
 */
public $hasMany = array(
    'OrderDrink' => array(
        'className' => 'OrderDrink',
        'foreignKey' => 'order_num'
    ),
    'OrderFood' => array(
        'className' => 'OrderFood',
        'foreignKey' => 'order_num'
    )
);

当我尝试这样做时,Cake 返回此错误消息:

Error: SQLSTATE[42P01]: Undefined table: 7 ERRO: faltando entrada para tabela "Order" na cláusula FROM LINE 1: ...ROM "public"."order_foods" AS "OrderFood" WHERE "Order"."c... ^

SQL Query: SELECT "OrderFood"."order_num" AS "OrderFood__order_num" FROM "public"."order_foods" AS "OrderFood" WHERE "Order"."check_num" = 358171

Notice: If you want to customize this error message, create app\View\Errors\pdo_error.ctp
4

1 回答 1

0

您正在尝试更新您的OrderFood模型,但您正在传递Order模型的条件。如果您查看 SQL 错误,您的 WHERE 子句正在引用Order未包含在语句中的表。

我确信有更好的方法可以做到这一点,但一个简单的解决方案是首先查询 Order 表并order_num为您的check_num. 然后将条件更改updateAll()OrderFood.order_num' => $order_num

于 2013-03-08T14:22:11.527 回答