【问题标题】:Converting sql to cake ORM将sql转换为蛋糕ORM
【发布时间】:2016-10-18 06:58:17
【问题描述】:

我有两个表:汽车和用户

汽车可以有一个所有者 -> 表用户的外键 和驱动程序(可以与所有者不同)-> 也是用户的外键

假设我有一个特定的理由使用这个查询:

$cars= json_encode($this->Cars->get($carsid[0]['id'], [
                        'contain' => ['Color','Model'] 
                        ]),JSON_HEX_APOS);

如果我在包含中添加“用户”,我将获得所有者用户而不是驱动程序

如何获取驱动程序?

我尝试过 innerJoin 和匹配,但它似乎与 get 方法一起工作

【问题讨论】:

  • 您是否在 CarsTable 中设置了 Cars 属于 Drivers?如果是这样,您只需执行'contain' => ['Driver', 'Model' ...]
  • Driver 是表 Cars 中的一列,而不是表 @arilia
  • 我知道这不是一张桌子。不过,您可以将 CarsTable 关联到 UsersTable,并告诉 cake 它应该将其称为 Drivers。看我的回答

标签: orm cakephp-3.0


【解决方案1】:

说明书上说

如您所见,通过指定 className 键,可以使用 同一个表作为同一个表的不同关联。你可以 甚至创建自关联表来创建父子 关系:

这样你就可以了

class CarssTable extends Table
{

    public function initialize(array $config)
    {

        $this->belongsTo('Users', [
            'className' => 'Users',
        ]);


        $this->belongsTo('Drivers', [
            'className' => 'Users',
        ]);
    }
} 

这样你就可以了

'contain' => ['Drivers', 'Models' ...]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 2015-09-21
    • 2012-08-29
    • 2016-07-01
    • 2020-09-12
    • 1970-01-01
    相关资源
    最近更新 更多