gpt4 book ai didi

php - yii2 获取相关记录

转载 作者:行者123 更新时间:2023-11-29 21:38:55 30 4
gpt4 key购买 nike

我想使用 ListView 小部件显示用户喜欢的帖子,因此数据提供者必须包含正确的记录,因为我不想在我的 View 中进行任何查询。

我可以使用以下方式访问发布数据:

<?php foreach ($likedposts as $post) { ?>
<?php var_dump($post->likedpost['title']); ?>
<?php } ?>

我的 Controller 如下:

public function actionIndex()
{

$user_id = Yii::$app->user->id;

$likedposts = Likedposts::find()->where([ 'user_id' => $user_id])->all();

return $this->render('index', [
'likedposts' => $likedposts,
]);
}

我希望能够访问数据,例如如下所示:

<?php foreach ($likedposts as $model) { ?>
<?php var_dump($model->title); ?>
<?php } ?>

架构用户
-id
-名称
-电子邮件
-密码

博客文章
-id
-标题
-内容

喜欢的帖子
-id
-post_id
-用户id

更新:

下面的第一个变量我需要获取所有喜欢的帖子,但是我只需要从表中选择 post_id,因为它将在 dataprovider 中使用,然后它将获取 id 属于 likepost 变量的所有帖子(也许需要创建一个变量数组?)

    $likedposts =  Likedposts::find()->where([ 'user_id' => $user_id])->all();
$dataProvider = Posts::find()->where(['id'] => $likedposts->post_id])->all();

更新 2(仅适用于一条/单个记录)

    $user_id = Yii::$app->user->id; 

//if i can change ->one() to all() it breaks
$likedposts = Likedposts::find()->where([ 'user_id' => $user_id])->one();

$DataProvider = new ActiveDataProvider([
'query' => Posts::find()->
where(['id' => $likedposts->post_id])->
orderBy('id DESC'),
'pagination' => [
'pageSize' => 20,
],
]);


return $this->render('index', [
'DataProvider' => $DataProvider,
]);

如果我使用 all() 会出现错误

尝试获取非对象的属性

最佳答案

您可以将相关模型和 dataProvider 传递给 View ..

我不知道你的代码,所以我只能以象征的方式做一些建议

public function actionIndex()
{

$user_id = Yii::$app->user->id;
$modellUser = User::find()->where(['id'=> $_user])->one();

$modelBlogPost = BlogPost::find()->where(['user_id' => $user_id])->one();

$searchModel = new \common\models\LikedpostsSearch();
$dataProviderLikedposts= $searchModel->search(Yii::$app->request->queryParams);
$dataProviderLikedposts->query->andWhere('User = ' . $User_id );

return $this->render('index', [
'modelUser' => $modelUser,
'modelBlogPost' =$modelBlogPost,
'dataProviderLikedposts' => $dataProviderLikedposts,
]);
}

在你看来

你可以

创建一个:

 detailView with  the $modelUser  for user information

<?= DetailView::widget([
'model' => $modelUser,
'mode' => 'view',
'attributes' => [
.....
],
]) ?>

一个

detailView with the $modelBlogPost for the blog post information

<?= DetailView::widget([
'model' => $modelBlogPost,
'mode' => 'view',
'attributes' => [
.....
],
]) ?>

一个

listView with the $dataProvideLikedpost for the likedpost information ..


<?= ListView::widget( [
'dataProvider' => $dataProviderLikedposts,
.....
] ); ?>

我希望这个元素可以为您提供正确的解决方案如果问题仅与获取您需要的 dataProvider 有关

对于包含您的查询的数据提供程序,您应该创建查询

$likedposts =  Likedposts::find()->where([ 'user_id' => $user_id])->all();

// only the query whitout all otherwise you obtain the models not the dataProvider
$query = Posts::find()->where(['id'] => $likedposts->post_id]);

使用您的查询创建新的 dataProvider

 $provider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => 20,
],

]);

然后在渲染 View 中传递此'dataProvider' => $provider

全部更新()

我认为最后一条评论(使用 one() 而不是使用 all() 与 $likedposts 中的结果是模型集合这一事实有关。在这种情况下,likedposts->post_id 不包含数组post_id 的但不是一个对象(该对象将是 $likedposts['0']->post_id)..

在您的查询中,您需要一个向量/数组,其中包含用户喜欢的 post_id 集。

foreach ($likedposts as $key => $value) { 
myArray[] = $value;
}


$query = Posts::find()->where( 'id IN ' . $myArray);

or

$query = Posts::find()->where(['id'] => $myArray]);

关于php - yii2 获取相关记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34697697/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com