[mysql]Yii2 选择两个表中的数据

标签: MySQL PHP
发布时间: 2017/4/9 21:45:53
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我如何可以从关系表中选择列?

$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`

但我不能使用表后我很想写数据从联接表中的列

解决方法 1:

那里是很好的解释,在这Yii2 Wiki 文章。但我将简化这一条,使用您的输入。

你可能有你想要加入的两种模型︰ common\models\Categorycommon\models\Post 与相匹配的数据库中的所有属性。此外,比方说, Category 有很多 Post s 与之关联,但 Post有一个 Category

1.在模型中定义的关系

首先,你必须作出 Yii2 了解是有两个模型之间的关系。Yii2 将做一些魔术以帮助您加入表,但你需要设置模型的拳头。

1.1 编辑 Category 模型

common\models\Category 中添加以下行︰

/**
 * @return \yii\db\ActiveQuery
 */
public function getPosts()
{
    return $this->hasMany(Posts::className(), ['category_id' => 'id_categoryFK']);
}

1.2 编辑 Post 模型

common\models\Post 中添加以下行︰

/**
 * @return \yii\db\ActiveQuery
 */
public function getCategory()
{
    return $this->hasOne(Post::className(), ['id_categoryFK' => 'category_id']);
}

2.检索数据

现在,从任何控制器你可以使用它像这样︰

/* 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;

3.保持学习

开始的那样,这Yii2 Wiki 文章将帮助您在您的案例的大部分。本其他Yii2 官方指南,也是很好。

您编码愉快 !

官方微信
官方QQ群
31647020