2016-06-08 70 views
0

目前我在我的模型中有以下代碼完美的工作,但我很困惑,因爲我沒有在相關表中指定字段之前指定關係名稱。Yii2如何在相關表格中指定字段時不需要指定關係名稱?

這是怎麼回事?

下面的代碼中使用

Relarion的名字是:categoriesToPosts

搜索型號

$query = Posts::find(); 
    $query->joinWith(['categoriesToPosts']); 

    if(!empty($params['cat'])){ 
     $query->andFilterWhere(['posts_categories_id' => $params['cat']]); 
    } 

我將有filterwhere部分的我喝了內認爲有以下:

['categoriesToPosts.posts_categories_id' => $params['cat']] 
+0

如果該posts_categories_id字段名是在查詢的唯一,我的意思是不是ambigous,那麼在這種情況下,SQL引擎本身解析正確的名字.. – scaisEdge

+0

@scaisEdge所以你說,如果我在兩個表中都有一個同名的字段,那麼我必須指定關係? –

+0

是的,在這種情況下,如果您沒有在andFilterWhere子句中指定表名稱(不是關係名稱),則會出現ambiguos列的錯誤。 – scaisEdge

回答

0

試試這個

$query = Posts::find(); 
$query->joinWith(['categoriesToPosts' => function($q) use($params){ 
    $query->andFilterWhere(['posts_categories_id' => $params['cat']]); 
}]); 

docs: Joining with Relations

相關問題