2016-04-18 9 views
3

私は2つのテーブルを持っています。車やタイヤ。タイヤは(!)車に属します。 (!)私は、彼らが属している車を含むすべてのタイヤを(取得したい場合ならば、私の理解から、CakePHP 3:自動的にleftJoinからフィールドを取得するには?

id | name 
------------- 
17 | BMW 
18 | Mercedes 

タイヤ::

id | car_id 
------------- 
1 | 17 
2 | NULL 

車私のテーブルは次のように見えます使用可能)内部結合を作成できません(含まれているため使用できません)。私は左の結合を使用する必要があります。しかし、そのように私はどのように自動的にテーブルの車のすべてのフィールドを選択するか分からない。私は

問合せ:

$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 

しかし、どのように、私も自動的に車からすべてのフィールドを得るのですか? バーズムは実際に私が何をしようとしたものを達成するためには...私に

を、私はそれがうまくケーキによって解決されるとは思わないので、私はすぐに細部に出たい溶液を得た

UPDATE、私は、次のコードを追加する必要があります。

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

そのタイヤでクルマは次のようになります。

... 
    'Cars' => [ 
     'id' => '17', 
     'name' => 'BMW' 
    ] 
... 

含まれていれば、次のようになります。

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

私はこれで作業できます。上記URLから取らそれでも、私は別の出力を理解していない...

答えて

3

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 

は、だからあなたの場合には、あなたが車のテーブルのインスタンスを渡す必要がありますselect()を呼び出します。

+0

'Query :: select($ articlesTable)'を使用する必要はありません - あなたはまた 'Query :: autoFields(true)'を実行することもできます - 結合によってロードされた束'Query :: select()'を別の呼び出しで書くことを避けたいとします。 – gazareth

関連する問題