如何从关系表中选择列?
$orders=Category::find()
->joinWith('posts')
->all();
我试过了
$orders=Category::find()
->select('post.*')
->joinWith('posts')
->all()
等,但我收到错误: 获取未知属性:common \ models \ Category :: id_post
Excecute Sql statment : SELECT `post`.* FROM `category` LEFT JOIN `post` ON `category`.`id_category` = `post`.`id_categoryFK`
但我不能使用表格帖子中的列 我想从连接表中写入数据
答案 0 :(得分:10)
这个Yii2 Wiki Article有一个非常好的解释。但我会使用您的输入简化该文章。
您可能有两个要加入的模型:common\models\Category
和common\models\Post
,所有属性都与数据库中的属性相匹配。另外,假设Category
有很多 Post
与之关联,但只有Post
有一个 Category
}。
首先,您必须让Yii2了解两个模型之间存在关系。 Yii2会做一些魔术来帮助你加入表格,但你必须先设置模型。
Category
模型在common\models\Category
中添加以下行:
/**
* @return \yii\db\ActiveQuery
*/
public function getPosts()
{
return $this->hasMany(Posts::className(), ['category_id' => 'id_categoryFK']);
}
Post
模型在common\models\Post
中添加以下行:
/**
* @return \yii\db\ActiveQuery
*/
public function getCategory()
{
return $this->hasOne(Post::className(), ['id_categoryFK' => 'category_id']);
}
现在,您可以从任何控制器中使用它,如下所示:
/* Access posts from a category*/
$category = common\models\Category::find()->where(['category_id'=>$category_id])->one();
foreach($category->posts as $post) // iterate over all associated posts of category
{
$postTitle = $post->title; //access data of Post model
}
/* Access category from post */
$post = common\models\Post::find()->where(['id'=>$post_id])->one();
$categoryName = $post->category->category_name;
正如我在开始时所说,Yii2 Wiki Article会在大多数情况下帮助您。另一个Yii2 official guide也非常好。
快乐的编码!