cakephp 3.5 innerjoin

bq9c1y66  于 2021-06-25  发布在  Mysql
关注(0)|答案(3)|浏览(375)

我有以下情况。我有一个表“司机\事件”在这里有存储的司机是为一个事件预订。现在我想做以下几点

SELECT
    Driver.id,
    Driver.name 
FROM
    drivers AS Driver 
    INNER JOIN
        drivers_events AS Listing 
        ON Driver.id = Listing.driver_id 
WHERE
    Listing.event_id = 83 
ORDER BY
    Driver.name ASC;

如果我在phpmyadmin中以sql查询的形式运行它,那么它可以很好地工作,并且我可以从表“drivers”中获得正确的id和名称。
当我在控制器里这样做的时候

$drivers = $this->Jobs->query("
    SELECT
        Driver.id,
        Driver.name 
    FROM
        drivers AS Driver 
        INNER JOIN
            drivers_events AS Event 
            ON Driver.id = Event.driver_id 
    WHERE
        Event.event_id = $activeevent 
    ORDER BY
        Driver.name ASC
");

然后我得到了过去创造的一系列就业机会。
我做错了什么?
如果有人能帮我就太好了。
提前谢谢

cpjpxq1n

cpjpxq1n1#

事件关键字是为sql保留的。请不要将其用于表别名。或者用这种方法。

drivers_events AS `Event`

希望对大家有用。

$result = $this->Jobs->find()
        ->enableAutoFields(true)
        ->enableHydration(false)
        ->select([
            'id' => 'Driver.id',
            'Title' => "Driver.name"
        ])
         ->join([
            'Events' => [
                'table' => 'drivers_events',
                'type' => 'INNER',
                'conditions' => [
                    'Jobs.event_id = Events.id',

                ],
            ]
        ])
        ->join([
            'Driver' => [
                'table' => 'drivers',
                'type' => 'INNER',
                'conditions' => [
                    'Events.driver_id = Driver.id',
                ],
            ]
        ])
        ->where([
            'Events.id' => $activeevent
        ])
        ->group('Driver.id')
        ->toArray();

参考:cakephp 3添加连接

new9mtju

new9mtju2#

Select Drivers.id, drivers.accountname

FROM TABLE__

Join table__
Join table__

And (Brand) Totaljobs.com

Having Count <4

group By Driver.id, Drivers.Accountname

Order by (Drivers.accountname)
nfg76nw0

nfg76nw03#

我试了很多。我得出的结论是,我可以读出分配给某项赛事的车手。
在控制器中看起来是这样的

$drivers = $this->Jobs->drivers_events->find('list',
      [
      'conditions' =>
      [
           'drivers_events.event_id' => $this->request->session()->read('Event.active')
      ],
      'keyField' => 'driver_id',
      'valueField' => 'driver_id'
      ]
 );

在模型中

$this->belongsTo('drivers_events', [
      'foreignKey' => 'event_id',
 ]);

所以现在我在一个活动中找到了合适的司机。但是如何从“drivers”表中获取驱动程序的名称而不是id?
谢谢你的帮助

相关问题