2016-06-08 68 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

相关问题