php - 在 Yi2 中查询并检查另一个表中的关系
问题描述
我正在尝试在 Yii2 表调用 Post 中获取数据。该表有一个属性调用所有者,我想检查所有者的值是否等于我通过调用它的特定值 userId 或所有者的值等于 Followship 表的以下属性,其中关注者属性的值Followship Table 的值等于我传递的值,称为 userId。在逻辑上一点一点地实现上述内容时,我编写了以下代码;
$allpost = Post::find()->all();
$relevantpost = [];
foreach ($allpost as $post) {
if($post->owner == $userId){
$relevantpost[] = $post;
}
else{
$follower = Followship::findOne(['follower'=>$userId, 'following'=>$post->owner]);
if($follower){
$relevantpost[] = $post;
}
}
}
return $relevantpost;
此代码运行良好,但我想为此编写一个活动查询,例如;
$allpost = Post::find()
->where(['owner'=>$userId])
->orWhere(['is NOT', $follower = Followship::findOne(['follower'=>$userId]) and 'owner' => $follower->following, NULL])
->all();
或者在更坏的情况下,
$allpost = \Yii::$app->db
->createCommand(
"SELECT postId, location, details, created_at FROM Post
WHERE owner = " . $userId. "OR
owner = '0' OR
owner = following IN (
SELECT following FROM Followship WHERE follower = ". $userId . " AND
)
ORDER BY dateCreated DESC"
)
->queryAll();
我不断收到上述查询的错误。我错过了 Yii2 查询构建器的基础知识。请对此提供任何帮助,我们将不胜感激。
解决方案
首先,您可以在 Post 类中建立关系(通过帖子所有者连接帖子和关注者)
class Post extends ActiveRecord {
public function getFollowersDataset() {
return $this->hasMany(Followers::className(), ['following' => 'owner']);
}
...
}
然后你可以在你的查询中使用它
Post::find()
->joinWith('followersDataset')
->where(['or',
['owner' => $user_id],
['follower' => $user_id]])
->all()
推荐阅读
- video-streaming - MKV 视频无法在智能电视网络应用程序上运行
- python - 使用 Python 和 Selenium 无法访问 chrome
- excel - Excel堆积面积图未到达图形边缘
- c++ - 如果 char 和 int 仅在位数上有所不同,为什么它们在打印时会有所不同?
- deep-learning - 计算相机和不同大小物体之间的距离
- javascript - Mui-Datatables 中的“更改 rowsPerPage”逻辑
- r - R - 功能:数据的逻辑转换?
- c# - 我如何知道我的 Asp.Net Web 应用程序是否是同步 -> 异步死锁的受害者?
- javascript - react JS,异步等待访问承诺值
- javascript - 这里发生了什么我试图围绕递归和这个返回函数