Вывод записей определённым пользователям

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
Alexalex
Сообщения: 32
Зарегистрирован: 2018.08.31, 13:53

Вывод записей определённым пользователям

Сообщение Alexalex »

Добрый день,пытаюсь сделать вывод записей, к которым у пользователя есть доступ, но пока что не очень получается. Не подскажите в чём проблема?



Контроллер

Код: Выделить всё

 public function actionIndex()
    {

        $par = Participants::find()->andFilterWhere(['man_id' => Yii::$app->user->id])->all();

        $participants = $par->deal_id;

        $dealList = Deal::find()->andFilterWhere(['author_id' => Yii::$app->user->id])->andFilterWhere(['id' => $par->deal_id])->all();

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

БД
Изображение

Модель

Код: Выделить всё

<?php

namespace app\models;

use Yii;

/**
 * This is the model class for table "participants".
 *
 * @property int $man_id
 * @property int $deal_id
 * @property string $email
 */
class Participants extends \yii\db\ActiveRecord
{
    /**
     * {@inheritdoc}
     */
    public static function tableName()
    {
        return 'participants';
    }

    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            [['email'], 'required'],
            [['man_id', 'deal_id'], 'integer'],
            [['email'], 'string', 'max' => 40],
        ];
    }

    /**
     * {@inheritdoc}
     */
    public function attributeLabels()
    {
        return [
            'man_id' => 'Man ID',
            'deal_id' => 'Deal ID',
            'email' => 'Почта пользователя',
        ];
    }
}
Аватара пользователя
carono
Сообщения: 52
Зарегистрирован: 2018.04.28, 11:05

Re: Вывод записей определённым пользователям

Сообщение carono »

замени в переменной $par ->all() на ->one()
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Вывод записей определённым пользователям

Сообщение andku83 »

Код: Выделить всё

->andFilterWhere(['man_id' => Yii::$app->user->id])
может привести к тому что если пользователь не залогинен - фильтр не применится, используйте ->andWhere().

Можно сделать одним запросом с подзапросом:

Код: Выделить всё

        $dealList = Deal::find()
            ->andWhere(['author_id' => Yii::$app->user->id])
            ->andWhere(['id' => Participants::find()->select(['id'])->andWhere(['man_id' => Yii::$app->user->id])])
            ->all();
либо с джойном:

Код: Выделить всё

        $dealList = Deal::find()
            ->innerJoin(Participants::tableName(), Participants::tableName().'.deal_id = '.Deal::tableName().'.id')
            ->andWhere(['author_id' => Yii::$app->user->id])
            ->andWhere([Participants::tableName().'.man_id' => Yii::$app->user->id])
            ->all();
Alexalex
Сообщения: 32
Зарегистрирован: 2018.08.31, 13:53

Re: Вывод записей определённым пользователям

Сообщение Alexalex »

andku83 писал(а): 2018.10.12, 14:47

Код: Выделить всё

        $dealList = Deal::find()
            ->andWhere(['author_id' => Yii::$app->user->id])
            ->andWhere(['id' => Participants::find()->select(['id'])->andWhere(['man_id' => Yii::$app->user->id])])
            ->all();
Спасибо, этот способ помог
Закрыто