【问题标题】:CakePHP - find Model using association other than idCakePHP - 使用 id 以外的关联查找模型
【发布时间】:2013-04-26 23:20:10
【问题描述】:

我没有运气试图弯曲 CakePHP 来做我需要的事情。

我有 2 个模型,Listing 和 ListingService。

ListingService的字段如下:id、title、listing_id、service_type_id (所以在某种程度上它就像一个拥有和属于许多与Listing的关系)

当我现在进行查找时。 (在Listing.php中使用belongsTo)

public $belongsTo = array(
    'ListingService' => array(
        'className'  => 'ListingService',
        'foreignKey' => 'id'
    )
);

$this->paginate = array('type' => 'all', 'recursive' => 0,
        'fields' => array('Listing.id', 'Listing.title',
                   'ListingService.service_type_id','ListingService.title'),
        'limit' => 10
);

这是正在显示的查询

SELECT `Listing`.`id`, `Listing`.`title`, `ListingService`.`service_type_id`, `ListingService`.`title` FROM `listings` AS `Listing` LEFT JOIN `listing_services` AS `ListingService` ON (`Listing`.`id` = `ListingService`.`id`) LIMIT 10

这几乎是我需要的,除了我希望 LEFT JOIN 为 ON (Listing.id = ListingService.listing_id) 而不是 ON (Listing.id = ListingService.id)

如果我使用“hasMany”,它甚至不会执行 LEFT JOIN。

我目前没有 ListingService.php 模型。

请指教。

谢谢你,
三通

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    找到了解决办法。

    我需要先这样做。

    $this->Listing->ListingService->primaryKey = 'listing_id';
    

    这是黑客行为吗?如果是,有没有更好的方法?

    【讨论】:

    • 如果listing_id 你的数据库中的主键,这不是一个hack,但它确实意味着你没有坚持使用CakePHP公约。如果它是一个新项目,我真的建议您尽可能使用 CakePHP 命名约定。这不仅会使事情变得更容易,而且还会迫使您保持一致。见Model and Database Conventions
    【解决方案2】:

    我觉得你的 belongsTo 应该是这样的

     public $belongsTo = array(
        'ListingService' => array(
             'className'  => 'ListingService',
             'foreignKey' => 'listing_id'
        )
     );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多