【问题标题】:relational access in yii2yii2 中的关系访问
【发布时间】:2017-07-26 05:43:50
【问题描述】:

我想在 Yii 2 中加入两个相互关联的表。 例如,我有一个名为 Digital 的模型和名为 Tablet 的模型,该模型与外键 sup_id 的关系数字模型。

所以我想访问并显示ListView 中的所有这两个表实体。 但是当我使用连接标签时,它只是访问调用Model::find() 的模型!!!! 但我想要所有这些:( 它显示了

Getting unknown property: app\models\Digital::sim_num

例如。 但是我在他们的模型中定义了关系

这是我在 SiteController 中的操作

public function actionPagination_product2(){
$dataProvider = new ActiveDataProvider([

 'query' => Digital::find()->select("Digital.*")->leftJoin('Tablet','Tablet.sup_id= Digital.id'),
    'pagination' => [
        'pageSize' => 20,
    ],
]);


   return $this->render('pagination_pro2', [
      'dataProvider' => $dataProvider,
   ]);
}

在 views/site/pagination_pro2 我有

   use yii\widgets\ListView;
   echo ListView::widget([
      'dataProvider' => $dataProvider,
      'itemView' => '_page1',
   ]);

在 views/site/_page1 我有

<?php
   use yii\helpers\Html;
   use yii\helpers\HtmlPurifier;
?>
<div class = "user">

   <?= $model->sim_num?>

</div>

问题出在哪里?:((

【问题讨论】:

    标签: php yii yii2 frameworks


    【解决方案1】:

    当您使用

    查询时,问题是对象
    Digital::find()
    

    您将只获得数字模型的所有属性

    如果你想获取另一个模型的属性,你可以在数字模型中设置另一个同名的公共变量

    或者你可以使用(yii/app/Query)::find() 来查询你的数据,你会得到一个数组

    或者在查询中,你可以直接在查询中得到-&gt;asArray(),然后你 可以使用Arraydataprovider来展示数据

    public function actionPagination_product2(){
    $data = (new yii/app/Query)::find()->from('digital')->leftJoin('Tablet','Tablet.sup_id= Digital.id')->asArray()->all();
    $dataProvider = new ArrayDataProvider([
        'allModels' => $data,
        'pagination' => [
            'pageSize' => 20,
        ],
    ]);
    
    
       return $this->render('pagination_pro2', [
          'dataProvider' => $dataProvider,
       ]);
    

    在列表视图中你可以使用它

     <?= (isset($model["sim_num"] && !empty($model["sim_num"]))?$model["sim_num"]:""?>
    

    【讨论】:

    • 感谢您的回复 ;) 有同样的问题,只能显示“数字”实体,当我想显示“平板电脑”实体时显示消息:“未定义索引 sim_num”。
    • 你可以试试我编辑的答案并检查你是否得到任何数据你也可以打印 $data 来检查它得到了什么作为响应
    • 不能在表达式的结果上使用 isset()(你可以使用 "null !== expression" 代替)并且当我使用 !=null 表达式时显示未定义的索引 sim_num 错误
    • 你能检查一下 $data 是否给你 sim_num 作为索引
    • 我使用 print_r 并查看 return.just 返回的数字属性
    【解决方案2】:

    如果你在 Digital 模型中定义关系就好了

    public function getTablet()
    {
        return $this->hasOne(Tablet::class, ['id' => 'sup_id']);
    }
    

    如果您不在查询中使用它,则不必将其加入 query 传递给 dataProvider。要在视图文件中访问它,只需使用:

    $model->tablet->sim_num;
    

    【讨论】:

    • tnx 供您回复;)我已经定义了这种关系。使用时试图获取非对象的属性:$model->tablet->sim_num;
    • 需要您在数据库中的外键?
    • 是的,我想通过外键跟踪并显示来自多个表的数据
    猜你喜欢
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    相关资源
    最近更新 更多