【问题标题】:CakePHP conditions for deep associations深度关联的 CakePHP 条件
【发布时间】:2013-09-26 10:31:45
【问题描述】:

我有一些使用可包含的深层关联,需要过滤结果。对于这个问题,假设我们正在销售汽车并希望按功能缩小结果范围。

Car hasmany make hasmany model HABTM features

$options = array( 
    'order' => array('Car.price'),
    'contain' => array(
        'make',
        'model' => array(
            'order' => 'Model.name ASC'
        ),
        'features'
    )
);
$cars = $this->Car->find('all', $options);

我将如何排除所有没有电动车窗的汽车(Features.name != power_windows)。

【问题讨论】:

    标签: cakephp associations conditional-statements containable


    【解决方案1】:

    Containable 只适合你指定取数据时要包含哪些模型,而完全不限制父模型取数据。一个明显的症状是有时您的父数据可能包含一些 null 包含的数据。

    所以要实现它,我认为我们应该在这里使用joins,以便您可以指定条件:

    $options = array(
        'order' => array('Car.price'),
        'contain' => array(
             'make',
             'model' => array(
                 'order' => 'Model.name ASC'
             ),
             'features'
        ),
        'joins' => array(
             array(
                 'table' => 'features',
                 'alias' => 'Feature',
                 'type' => 'LEFT',
                 'conditions' => array(
                     'Car.id = Feature.car_id'
                 )
             )
         ),
         'conditions' => array(
              'Features.name !=' => 'power_windows',
         )
    );
    

    但这样做的一个缺点是您可能由于加入而重复了Car。这是一个单独的问题;)

    【讨论】:

    • 谢谢莱昂内尔,我不知道你可以同时使用这两个...这开辟了很多可能性!
    猜你喜欢
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多