CakePHP 3:如何自动从leftJoin获取字段?

And*_*tis 4 mysql cakephp left-join cakephp-3.0

我有两张桌子。汽车和轮胎。轮胎可以属于汽车。我的表看起来像:

轮胎:

id  |  car_id
-------------
1   |  17
2   |  NULL
Run Code Online (Sandbox Code Playgroud)

汽车:

id  |  name
-------------
17  |  BMW
18  |  Mercedes
Run Code Online (Sandbox Code Playgroud)

根据我的理解,如果我想获得所有(!)轮胎(包括它们所属的汽车,如果有的话),则无法创建内部联接(因此,我不能使用Contain)。我需要使用左联接。但是那样我不知道如何自动选择台式车上的所有字段。

查询我:

$query = $this->Tires->find('all');
$query->leftJoin(
    ['Cars' => 'cars'],
    ['Cars.id = Tires.car_id']
);

// brings this SQL query
SELECT Tires.id AS `Tires__id`, Tires.car_id AS `Tires__car_id`
FROM tires Tires 
LEFT JOIN cars Cars ON Cars.id = Tires.car_id
Run Code Online (Sandbox Code Playgroud)

但是,如何自动从汽车中获取所有字段呢?

UPDATE burzum实际上给了我迅速想详细说明的解决方案,因为我认为蛋糕不能很好地解决它。

为了实现我试图做的事情,我需要添加以下代码:

$query
  // you need to pass each model you want to get fields for
  ->select($this->Tires)
  ->select($this->Tires->Cars);
Run Code Online (Sandbox Code Playgroud)

轮胎中的汽车如下所示:

...
    'Cars' => [
        'id' => '17',
        'name' => 'BMW'
    ]
...
Run Code Online (Sandbox Code Playgroud)

如果我做了一个容器,它将看起来像这样:

...
    'car' => object(App\Model\Entity\Car) {
        'id' => (int) 17,
        'name' => 'BMW',
        '[new]' => false,
        '[accessible]' => [
            '*' => true
        ],
        '[dirty]' => [],
        '[original]' => [],
        '[virtual]' => [],
        '[errors]' => [],
        '[invalid]' => [],
        '[repository]' => 'Cars'
    }
...
Run Code Online (Sandbox Code Playgroud)

因此,我可以解决这个问题。不过,我不明白不同的输出...

bur*_*zum 6

http://book.cakephp.org/3.0/en/orm/query-builder.html#selecting-all-fields-from-a-table

取自上述网址的示例:

// Only all fields from the articles table including
// a calculated slug field.
$query = $articlesTable->find();
$query
    ->select(['slug' => $query->func()->concat(['title', '-', 'id'])])
    ->select($articlesTable); // Select all fields from articles
Run Code Online (Sandbox Code Playgroud)

因此,在您的情况下,您需要将cars表的实例传递给select()调用。